0

我有一个关于 javascript/html 的问题。

首先,我有这个:

var post = document.body.getElementsByClassName("post");  
var x=post[i].getElementsByClassName("MyDiv")[0].innerHTML;  

我从未定义的调试器中得到x,它不存在。

这个 javascript 函数运行onload主体。我确信我在我的 javascript 中给出了正确的类名,所以它应该找到我的 div。

所以,我在某处读到,有时 javascript 找不到元素,因为它还不存在,它还没有在浏览器中创建(不管这意味着什么)。

由于这个原因,我的函数是否有可能找不到具有该类名的 div?

有解决办法吗?

4

2 回答 2

1

好的,不要用 调用函数,而是 body onload使用 jQuery 的ready()函数,或者,如果你不想使用 jQuery,你可以使用纯 javascript,但这取决于你:

// jQuery
$(document).ready(function() {
    var post = document.getElementsByClassName("post"),
    x = post[i].getElementsByClassName("MyDiv")[0].innerHTML;
});

// JavaScript
window.onload = function initialization() {
    var post = document.getElementsByClassName("post"),
    x = post[i].getElementsByClassName("MyDiv")[0].innerHTML;
}

一些旁注,我不知道它的用途innerHTML 是什么,而且如果你正在做一个 for 循环,i那么肯定会发布该代码,这很重要。

经过一番讨论,我的回答似乎对您有用,但您也可以按照@RobG 的建议将脚本放在正文标签的末尾。

于 2013-02-03T23:14:19.353 回答
1

所以,我在某处读到,有时 javascript 找不到元素,因为它还不存在,它还没有在浏览器中创建(不管这意味着什么)。

浏览器在获取标记时会逐步创建 DOM。当遇到脚本元素时,所有标记处理都会在脚本运行时停止(除了defer 和 async有影响的地方)。如果脚本尝试访问尚未创建的元素(可能是因为尚未处理其标记),则不会找到它。

此 javascript 函数运行正文的加载。

如果这意味着您正在使用类似的东西:

<body onload="someFn()"...>

也许

<script>
  window.onload = function() {
    someFn();
    ...
  }
</script>

然后在调用该函数时,所有 DOM 节点都可用。有些,如图像,可能没有完全加载,但它们的元素已经创建。

如果这意味着您在正文中有脚本并且没有使用该load事件,您应该将脚本移动到页面底部(例如,就在结束body标记之前)并查看是否可以解决问题。

于 2013-02-04T02:30:24.550 回答