我在JavaScript方面没有太多经验,到目前为止我有这个:
function loop() {
var authorDivs = document.getElementById('ctl00_MainContent_MCPObjectInfo_dvCreatorView').getElementsByTagName("div");
for (var i = 0; i < authorDivs.length; i++) {
var divOfDiv = authorDivs[i].getElementsByTagName("div");
if (typeof divOfDiv.item(i) === 'undefined' || divOfDiv.item(i) === null) {
console.log("This is undefined or null");
}
else {
var realDivs = divOfDiv.item(i);
realDivs.item(i).textContent = "please work plz";
}
}
}
我从FireFox中的控制台收到以下错误:TypeError: realDivs is undefined
此行:realDivs.item(i).innerHTML = "please work plz";
基本上我拥有(在我的脑海中)是一个循环,通过authorDivs
并获取divs
中的所有divs
并将其保存在divOfDiv
中。然后我检查divs
中的divOfDiv
是undefined
还是null
,如果不那么divs
获取保存在变量realDivs
中,然后我用它来编辑innerHTML。那是我理想喜欢看到的,是什么导致错误?我究竟做错了什么?
注意:我无法访问jQuery,只能访问JavaScript。
编辑:我已经添加了下面建议的更改并修复了 - 谢谢!但我现在收到以下错误:TypeError: realDivs.item is not a function
是什么造成的?另一方面,我如何知道我何时处理数组以及何时处理HTMLCollection?你只是假设?我从来没有使用过松散类型的语言,所以它对我来说是新手。
答案 0 :(得分:2)
如果您的if (typeof divOfDiv.item(i) === 'undefined' || 'null')
返回true,则会发生这种情况。然后你永远不会初始化realDivs
(如果条件是假的会发生什么)。稍后您尝试在该单元化对象上调用item
函数
答案 1 :(得分:2)
好吧,您需要将该代码移动到应该阻止它的条件块中!此外,|| "null"
无法按预期运行,您需要明确检查|| divOfDiv.item(i) === null
。
所以试试
for (var i = 0; i < authorDivs.length; i++) {
var divOfDiv = authorDivs[i].getElementsByTagName("div");
if (divOfDiv.item(i) == null) {
console.log("This is undefined or null");
} else {
var realDivs = divOfDiv.item(i)
realDivs.item(i).innerHTML = "please work plz";
console.log(divOfDiv.item(i));
}
}
然而,由于两个原因,这仍然无法发挥作用:
i
- i
的{{1}}索引来自divOfDiv
上的迭代 - 几乎不是您想要的。相反,在所有authorDivs
上使用第二个循环。divOfDiv
变量确实包含一个realDivs
,但没有<div>
方法。您只需直接访问其.item
媒体资源。所以你应该使用
.innerHTML
答案 2 :(得分:0)
代码中存在两个问题。
将DOM对象与未定义的&#39;进行比较和null。如果authorDivs [i]中没有div标签,它将返回空DOM数组。因此,将空DOM数组与undefined和null进行比较并不是一个好方法。我们可以使用数组长度属性进行验证。
divOfDiv = authorDivs [i] .getElementsByTagName(&#34; div&#34;);
if(divOfDiv.length&gt; 0){console statement}
由于项目(i)已经返回单个DOM元素,&#34; realDivs&#34;的项目(i)变量不是正确的方法。除此之外,在验证realDivs是否包含DOM元素之后,还需要使用innerHTML方法。请更新以下代码。
var realDivs = divOfDiv.item(i); realDivs? (realDivs.innerHTML =&#34;请工作PLZ&#34;):null;
注意:如果DOM不可用,则item(i)将返回null。