“document.getElementByClass 不是函数”

IT技术 javascript
2021-02-08 05:47:55

我正在尝试onclick使用class="stopMusic". 我在 Firebug 中遇到错误

document.getElementByClass 不是函数

这是我的代码:

var stopMusicExt = document.getElementByClass("stopButton");
    stopButton.onclick = function() {
        var ta = document.getElementByClass("stopButton");
        document['player'].stopMusicExt(ta.value);
        ta.value = "";
    };
6个回答

您可能的意思是document.getElementsByClassName()(然后从结果节点列表中获取第一项):

var stopMusicExt = document.getElementsByClassName("stopButton")[0];

stopButton.onclick = function() {
    var ta = document.getElementsByClassName("stopButton")[0];
    document['player'].stopMusicExt(ta.value);
    ta.value = "";
};

您可能仍会收到错误消息

document.getElementsByClassName 不是函数

但是,在较旧的浏览器中,如果您需要支持那些较旧的浏览器,则可以提供回退实现。

不是作为内置实现。您可能需要使用像 Mootools 或 jQuery 这样的库(这使它变得非常简单)。
2021-03-15 05:47:55
谢谢,有道理。用于选择更符合浏览器的所有类名的函数吗?或者是否可以为数组节点选择一个范围?(即0-100)?
2021-03-23 05:47:55
caniuse.com/#feat=getelementsbyclassname 来看,似乎只有 IE8 不支持此方法。
2021-04-02 05:47:55
对于高于轻的jQuery库到刚刚做选择,你可以使用,这是jQuery的选择是基于关闭。
2021-04-05 05:47:55
@tmeans:是的,虽然在发布时这是一件大事。
2021-04-08 05:47:55

正如其他人所说,您没有使用正确的函数名称,并且并非在所有浏览器中都普遍存在。

如果您需要跨浏览器获取带有 id 的元素以外的任何内容document.getElementById(),那么我强烈建议您获取一个支持所有浏览器的 CSS3 选择器的库。它将为您节省大量的开发时间、测试和错误修复。最简单的方法就是使用jQuery,因为它的应用范围非常广泛,拥有出色的文档,拥有免费的 CDN 访问权限,并且拥有优秀的社区支持者来回答问题。如果这看起来超出了您的需要,那么您可以获得Sizzle,它只是一个选择器库(它实际上是 jQuery 和其他内部的选择器引擎)。我已经在其他项目中单独使用过它,它简单、高效且小巧。

如果您想一次选择多个节点,您可以采用多种不同的方式。如果你给他们所有相同的类,你可以这样做:

var list = document.getElementsByClassName("myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

它将返回具有该类名的节点列表。

在 Sizzle 中,它将是这样的:

var list = Sizzle(".myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

在 jQuery 中,它会是这样的:

$(".myButton").each(function(index, element) {
    // element is a node with the desired class name
});

在 Sizzle 和 jQuery 中,您可以像这样将多个类名放入选择器中,并使用更复杂和更强大的选择器:

$(".myButton, .myInput, .homepage.gallery, #submitButton").each(function(index, element) {
    // element is a node that matches the selector
});
现在似乎对 document.getElementsByClassName caniuse.com/#feat=getelementsbyclassname有广泛的(普遍的?)支持
2021-03-16 05:47:55
@MatthewEvans - 是的,这是 2011 年的答案。
2021-04-03 05:47:55

在进行任何进一步的错误检查之前,请先检查它是否

document.getElement s ByClassName() 本身。

仔细检查它的 getElement s而不是 getElement

应该是getElementsByClassName,而不是getElementByClass看到这个 - https://developer.mozilla.org/en/DOM/document.getElementsByClassName

请注意,某些浏览器/版本可能不支持此功能。

我的解决方案是:

  • 改变:

    document.getElementsByClassName('.className')
    
  • 到:

    document.querySelector('.className')