我在 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?你只是假设吗?我以前从未使用过松散类型的语言,所以它对我来说是新的。
最佳答案
好吧,您需要将该代码移动到应该阻止它的条件 block 内!另外,|| "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
的索引-thdivOfDiv
来自authorDivs
的迭代- 几乎不是你想要的。相反,对所有divOfDiv
使用第二个循环- 您的
realDivs
变量确实保存单个<div>
,其中没有.item
方法。您只需直接访问其.innerHTML
属性(property)。
所以你应该使用
var authorDivs = document.getElementById('authorView').getElementsByTagName("div");
for (var i=0; i<authorDivs.length; i++) {
var divsOfDiv = authorDivs.item(i).getElementsByTagName("div");
for (var j=0; j<divsOfDiv.length; j++) {
var realDiv = divsOfDiv.item(j);
realDiv.innerHTML = "please work plz";
console.log(realDiv);
}
}
关于JavaScript 抛出 TypeError 说我的变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220918/