getElementsByClassName方法不工作,但的getElementById是
下面的代码工作(警报弹出):getElementsByClassName方法不工作,但的getElementById是
var sound = document.getElementById("music");
sound.addEventListener("play", function() {
alert("playing");
});
....
....
<audio controls id="music">
<source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
但为什么这个不行?
var sound = document.getElementsByClassName("music");
sound.addEventListener("play", function() {
alert("playing");
});
....
....
<audio controls class="music">
<source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
这不工作,要么万一getElementsByClassName方法返回不同的东西比的getElementById:
('.sound').addEventListener("play", function() {
alert("playing");
});
....
....
<audio controls class="music">
<source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
我所改变的是一个ID而不是,我给它一个类(因为我有多个实例这个音频播放器),并使用getElementsByClassName而不是getElementById。我认为getElementsByClassName现在与所有浏览器兼容?我正在使用最新的Firefox。
我很确定document.getElementsByClassName()
将返回元素集合,即使页面上只有一个具有该类名称的元素。所以你实际上并没有将事件监听器应用到音频元素,而是一组元素。
如果总是只有一个类声音元素,请尝试var sound = document.getElementsByClassName("music")[0];
。
谢谢。虽然我有这个音频播放器的类名称为“sound”的多个实例,但我想我需要某种for循环来将“eventlistener”附加到“sound”的每个实例上?为什么不'('.sound')。addEventListener(“play”,function()工作? – Windbrand 2013-03-03 02:31:51
@Windbrand'('.sound')'实际上只是说得到字符串“.sound”的值。这可能不是你想要做的,我认为你正在尝试使用像[jQuery](http://jquery.com)或[Prototype](http://prototypejs.org/)这样的Javascript框架。 ('play',function(){alert('playing')),这些元素使用'$'来按类或类来选择元素,例如,在jQuery中你可以写'$('。sound')。 ;});' – 2013-03-03 02:39:44
'getElementById'返回一个元素,'getElementsById'返回'NodeList'对象,即它基本上是一个元素数组。在另一个问题上查看更新的答案。 – ultranaut 2013-03-03 02:07:46
本应该是“'getElemensByClassName''返回'NodeList'”。 – ultranaut 2013-03-03 02:20:29
可能重复[什么getElementsByClassName返回?](http://stackoverflow.com/questions/10693845/what-does-getelementsbyclassname-return) – Bergi 2015-10-29 10:10:25