JavaScript 抛出 TypeError 说我的变量未定义

标签 javascript html typeerror

我在 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中。然后我检查是否 divsdivOfDivundefinednull ,如果它们不是那么那些 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 的索引-th divOfDiv来自 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/

相关文章:

javascript - Angular 2 中的 ChangeDetectionStrategy.OnPush 和 Observable.subscribe

javascript - 功能的冗余类型检查?

JavaScript 性能 – 删除伪 DOM 项

html - 为什么内部 div 容器会溢出?

html - 按百分比设置 Bootstrap 模态主体高度

javascript - AngularJs 为什么在 ng-disabled 函数上 undefined object ?

javascript - 将可枚举函数添加到对象原型(prototype)时未捕获类型错误

javascript - 如何在一个 Bootstrap 处于事件状态时隐藏面板?

python - 什么是 Python 映射?

html - 如果文本太长,列表文本会溢出