JavaScript抛出TypeError,表示我的变量未定义
我在JavaScript方面没有太多经验,到目前为止我有以下几点:JavaScript抛出TypeError,表示我的变量未定义,javascript,html,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 divOfDi
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";
}
}
}
函数循环(){
var authorDivs=document.getElementById('ctl00_main content_mcobjectinfo_dvCreatorView')。getElementsByTagName(“div”);
对于(var i=0;i
我从FireFox的控制台中得到以下错误:TypeError:realDivs在这一行未定义:realDivs.item(I).innerHTML=“请工作plz”代码>
本质上,我(在我的脑海中)拥有的是一个循环,它通过authorDivs
获取这些div
中的所有div
,并将它们保存在divOfDiv
中。然后检查divOfDiv
中的div
是否未定义
或null
,如果它们不是,那么这些div
将保存在变量realDivs
中,然后我使用该变量编辑内部HTML。这是我理想中希望看到的情况,是什么导致了错误?我做错了什么
注意:我不能访问jQuery,只能访问JavaScript
编辑:我已经添加了下面建议的更改,并且已经修复了--谢谢!但是我现在得到了以下错误:TypeError:realDivs.item不是一个函数
是什么原因造成的?另一方面,我如何知道何时处理数组以及何时处理HTMLCollection?你只是假设吗?我以前从未使用过松散类型的语言,所以对我来说是新的 如果(divOfDiv.item(i)===“未定义”| | null')
返回true时,会发生这种情况。然后您永远不会初始化realDivs
(如果条件为falsy,会发生什么情况)。稍后,您尝试调用该单元化对象上的item
函数当如果(typeof divOfDiv.item(i)=='undefined'| |'null')
返回true时,就会发生这种情况。然后您永远不会初始化realDivs
(如果条件为falsy,会发生什么情况)。稍后您尝试调用统一化对象上的item
函数那么,您需要将该代码移动到应该阻止它的条件块中!另外,| |“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));
}
}
那么,您需要将代码移动到应该阻止它的条件块中!另外,| |“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));
}
}
代码中有两个问题
将DOM对象与“未定义”和null进行比较。如果div标记在authorDivs[i]中不可用,它将返回空DOM数组。所以,将空DOM数组与未定义和null进行比较并不是一个好的方法。我们可以使用数组长度属性进行验证
divOfDiv=authorDivs[i].getElementsByTagName(“div”)
如果(divOfDiv.length>0){console语句}
由于项(i)已经返回单个DOM元素,“realDivs”变量的项(i)不是正确的方法。除此之外,在验证realDivs是否包含DOM元素之后,还需要使用innerHTML方法。请按以下方式更新代码
var realDivs=第(i)项的divOfDiv;
realDivs?(realDivs.innerHTML=“请工作”):null
注意:如果DOM不可用,项(i)将返回null。代码中有两个问题
将DOM对象与“未定义”和null进行比较。如果div标记在authorDivs[i]中不可用,它将返回空DOM数组。所以,将空DOM数组与未定义和null进行比较并不是一个好的方法。我们可以使用数组长度属性进行验证
divOfDiv=authorDivs[i].getElementsByTagName(“div”)
如果(divOfDiv.length>0){console语句}
由于项(i)已经返回单个DOM元素,“realDivs”变量的项(i)不是正确的方法。除此之外,在验证realDivs是否包含DOM元素之后,还需要使用innerHTML方法。请按以下方式更新代码
var realDivs=第(i)项的divOfDiv;
realDivs?(realDivs.innerHTML=“请工作”):null
注意:如果DOM不可用,项(i)将返回null。您仅在else
子句中分配realDivs
,然后在if
之外使用它。您希望得到什么?在代码执行和检查变量和对象时,一次调试一行代码并逐步完成它。这就是你发现问题的方法。| |“null”
是非常错误的。好吧,我已经添加了这些更改,就像我说的,我是非常新的。。。尽我最大的努力。我已经逐行检查了代码,但是当您不一定知道什么是对的时,很难找出错误。您只在else
子句中分配realDivs
,然后在if
之外使用它。您希望得到什么?在代码执行和检查变量和对象时,一次调试一行代码并逐步完成它。这就是你发现问题的方法。| |“null”
是非常错误的。好吧,我已经添加了这些更改,就像我说的,我是非常新的。。。尽我最大的努力。我已经一行一行地浏览了代码,但是当你不一定知道什么是对的时候,很难找出什么是错的。