“ document.getElementByClass不是函数”


142

我正在尝试使用来运行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 = "";
    };


您的函数名称缺少“ s”。在公认的答案中,缺失的“ s”的含义不是很明显。因此在这里评论。
Anurag Priyadarshi

Answers:


249

您可能是想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 不是功能

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


谢谢,这很有意义。是用于选择所有与浏览器兼容的所有类名的功能吗?还是可以为阵列节点选择一个范围?(即0-100)?
user547794 2011年

不作为内置实现。您可能需要使用Mootools或jQuery之类的库(这使其非常容易)。
BoltClock

要使一个比jQuery轻的库进行选择,可以使用Sizzle,这是jQuery选择器的基础。
zzzzBov

3
caniuse.com/#feat=getelementsbyclassname来看,似乎只有IE8不支持此方法。
tmeans

1
@tmeans:是的,尽管在发布时这是一个很大的问题。
BoltClock

14

正如其他人所说,您使用的功能名称不正确,并且并非在所有浏览器中都存在。

如果您需要跨浏览器提取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
});

2
现在似乎对document.getElementsByClassName caniuse.com/#feat=getelementsbyclassname
Matt Evans

@MatthewEvans-是的,这是2011年的答案。
jfriend00

12

在跳入任何进一步的错误检查之前,请先检查其是否

document.getElement ByClassName()本身。

仔细检查其getElement 小号,而不是getElement




0

您拼写错误,应该是“ getElementsByClassName”,

var objs = document.getElementsByClassName("stopButton");
var stopMusicExt = objs[0]; //retrieve the first node in the stack

//your remaining function goes down here.. 
document['player'].stopMusicExt(ta.value);
ta.value = "";

document.getElementsByClassName-返回具有多个项的节点堆栈,因为CLASS属性用于分配给多个对象...


-1
    enter code here
var stopMusicExt = document.getElementByClass("stopButton").value;
    stopButton.onclick = function() {
        var ta = document.getElementByClass("stopButton");
        document['player'].stopMusicExt(ta.value);
        ta.value = "";
    };


// .value will hold all data from class stopButton

-1

getElementByClass不存在,可能您想使用getElementsByClassName。但是,您可以使用其他方法(用于angular / vue / react ...模板)

function stop(ta) {
  console.log(ta.value) // document['player'].stopMusicExt(ta.value);
  ta.value='';
}
<input type="button" onclick="stop(this)" class="stopMusic" value='Stop 1'>
<input type="button" onclick="stop(this)" class="stopMusic" value='Stop 2'>


-1

如果您编写了此“ getElementByClassName”,则将遇到此错误“ document.getElementByClass不是函数”,因此要克服该错误,只需编写“ getElementsByClassName”。因为应该是元素而不是元素。


它已经在8年前得到了答复,您可能想要检查现有答案以防止回答同一件事
MickaelB。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.