我没有太多的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中的divOfDivundefined还是null,如果不是,则将这些divs保存在变量realDivs中,然后使用该变量来编辑innerHTML。这就是我理想中希望发生的情况,是什么导致错误?我究竟做错了什么?

注意:我无权访问jQuery,而只能访问JavaScript。

编辑:我已经添加了下面建议的更改,并对其进行了修复-谢谢!但是我现在遇到以下错误:TypeError: realDivs.item is not a function

是什么原因造成的?另一个需要注意的是,我如何知道何时处理数组以及何时处理HTMLCollection?你只是假设吗?我以前从未使用过松散类型的语言,因此它对我来说是新的。

最佳答案

好吧,您需要将该代码移入应该阻止该条件的条件块中!另外,|| "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));
    }
}


但是,由于以下两个原因,它仍然不能真正起作用:


用于访问第iidivOfDiv索引来自authorDivs上的迭代-几乎不是您想要的。而是在所有divOfDiv上使用第二个循环。
您的realDivs变量确实包含一个<div>,它没有.item方法。您只需直接访问其.innerHTML属性。


所以你应该用

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);
    }
}

08-17 09:03