var eval_table = document.getElementsByClassName("evaluation_table");
console.log(eval_table);
显示为:
[item: function, namedItem: function]0:
table.widefat.fixed.evaluation_table
length: 1
__proto__: HTMLCollection
但是,当我尝试获得eval_table
,eval_table.length
的长度时,它会返回0
的值。我之前使用过这种方法,之前没有遇到任何问题。我上面想要达到的目标有什么不对吗?
答案 0 :(得分:32)
这是因为在元素呈现给DOM之前,JS正在运行。我敢打赌你运行的脚本是在你的html <body>
之前加载的。您有两种选择:
<script>
添加为<body>
标记中的最后一项或; $(document).ready
或document.addEventListener("DOMContentLoaded", function(e) {// do stuff })
以下代码示例:
<html>
<head></head>
<script>
document.addEventListener("DOMContentLoaded", function(e) {
var eval_table = document.getElementsByClassName('evaluation_table');
console.log(eval_table, eval_table.length);
});
</script>
<body>
<div class="evaluation_table"></div>
<div class="evaluation_table"></div>
<div class="evaluation_table"></div>
<div class="evaluation_table"></div>
</body>
</html>
答案 1 :(得分:0)
您可以在
中编写代码$('document').ready(function(){
// your code
});
或on body onload或DOM ready
<body>
Your HTML here
<script>
// self executing function here
(function() {
var eval_table = document.getElementsByClassName("evaluation_table");
console.log(eval_table,eval_table.length);
})();
</script>
</body>
我已尝试过jsFiddle
答案 2 :(得分:0)
要访问HTMLCollection位置0的元素,您应该使用
setTimeout(() => {
let elms = document.getElementsByClassName('ClassName').item(0)
}, 0);
使用setTimeout
确保DOM完成渲染。