【问题标题】:getElementsByClassName not returning lengthgetElementsByClassName 不返回长度
【发布时间】:2013-01-08 23:23:39
【问题描述】:

我想获取返回的类名的length

我想向一系列按钮添加事件侦听器,它们都共享相同的类名。

removeButton = document.getElementsByClassName("removeButton");

当我使用removeButton.length 时,我总是得到0,但如果我这样做:

console.log(removeButton)我可以看到那里的物品清单。

我需要长度,以便可以遍历 for-loop 并分配事件侦听器。

似乎是什么问题?

解决方案
在尝试使用 getElementsByClassName 收集元素之前检查元素是否存在

【问题讨论】:

  • 整个文档加载后是否正在执行javascript?也许您正在尝试访问尚不存在的元素
  • 你能添加包围removeButton = document.getElementsByClassName("removeButton");的代码
  • 代码本身运行良好:jsfiddle.net/sRK8V
  • @KaeruCT :这就是问题所在......元素还不存在。谢谢
  • 而不是在问题中发布解决方案,您应该要求@KaeruCT 发布答案并接受它,或者发布并接受您自己的答案(这样问题就不会出现未答复)

标签: javascript getelementsbyclassname


【解决方案1】:

如果您的 JavaScript 代码依赖这些元素,您必须确保这些元素存在。

通过将<script> 标签放在正文末尾来实现此目的的一种方法是:

<html>
<head></head>
<body>
<script type="text/javascript">
    // code here
</script>
</body>

您还可以将所有代码放入window.onload 事件的函数中,或使用提供此功能的库,例如jQuery

【讨论】:

  • 不!从不将脚本元素放在正文中!您应该运行由window.onload = function() {/*function calls here*/} 调用的函数,并在页面的head 元素中的所有脚本元素上使用defer="defer" 属性/值。
【解决方案2】:

正如 OP 所说,

在尝试收集元素之前检查元素是否存在 getElementsByClassName。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2020-04-08
    • 2013-02-26
    相关资源
    最近更新 更多