Javascript 代码don';不工作,可以';t读取属性';类名';未定义的

Javascript 代码don';不工作,可以';t读取属性';类名';未定义的,javascript,html,classname,typeerror,Javascript,Html,Classname,Typeerror,这个代码有什么问题 var divarray = []; var articleHTML = []; var absHTML; var keyHTML; var bodyHTML = []; var i = 0; divarray = document.getElementById("yui-main").getElementsByTagName("div"); for ( var j in divarray) { if(divarray[i].className == "article

这个代码有什么问题

var divarray = [];
var articleHTML = [];
var absHTML;
var keyHTML;
var bodyHTML = [];
var i = 0;
divarray = document.getElementById("yui-main").getElementsByTagName("div");
for ( var j in divarray) {
    if(divarray[i].className == "articleBody"){
        articleHTML = divarray[i];
        for( var k in articleHTML ){
            bodyHTML[i] = '';
            if(articleHTML[i].className == "issueMiniFeature"){continue;}
            if(articleHTML[i].className == "abstract"){absHTML = articleHTML[i]; continue;}
            if(articleHTML[i].className == "journalKeywords"){keyHTML = articleHTML[i]; continue;}
            bodyHTML[i] = articleHTML[i];
        }
        break;
    }
    i++;
}
我得到的错误是:

TypeError: Cannot read property 'className' of undefined
我正在使用谷歌浏览器。

你的意思是:

var divarray = [];
var articleHTML = [];
var absHTML;
var keyHTML;
var bodyHTML = [];
var i = 0;
divarray = document.getElementById("yui-main").getElementsByTagName("div");
for ( var j in divarray) {
    if(divarray[j].className == "articleBody"){
        alert("found");
        articleHTML = divarray[j];
        break;
    }
    bodyHTML[i] = '';
    if(divarray[j].className == "issueMiniFeature"){continue;}
    if(divarray[j].className == "abstract"){absHTML = divarray[j]; continue;}
    if(divarray[j].className == "journalKeywords"){keyHTML = divarray[j]; continue;}
    bodyHTML[i] = divarray[j];
    i++;
}
你是说:

var divarray = [];
var articleHTML = [];
var absHTML;
var keyHTML;
var bodyHTML = [];
var i = 0;
divarray = document.getElementById("yui-main").getElementsByTagName("div");
for ( var j in divarray) {
    if(divarray[j].className == "articleBody"){
        alert("found");
        articleHTML = divarray[j];
        break;
    }
    bodyHTML[i] = '';
    if(divarray[j].className == "issueMiniFeature"){continue;}
    if(divarray[j].className == "abstract"){absHTML = divarray[j]; continue;}
    if(divarray[j].className == "journalKeywords"){keyHTML = divarray[j]; continue;}
    bodyHTML[i] = divarray[j];
    i++;
}

articleHTML
初始化为数组,然后将
articleHTML
设置为HTMLElement(
divarray[i]
),然后将其视为数组(
articleHTML[i]
)-这实际上是试图获取从
divarray
中提取的HTMLElement的
i
属性,它不存在,然后您尝试获取此未定义值的
className

您将
articleHTML
初始化为数组,然后您显然将
articleHTML
设置为HTMLElement(
divarray[i]
),但随后将其视为数组(
articleHTML[i]
)-这实际上是尝试获取从
divarray
中提取的HTMLElement的
i
属性,该属性不存在,然后尝试获取此未定义值的
className

您使用的是一个非常奇怪的循环

 for (var j in array) {
    // use array[i]
    ++ i
 }
问题是
。getElementsByTagName
不返回数组,而是返回类似数组的接口。例如:

>>> for (var j in document.getElementsByTagName('body')) console.log(j)
0
length
item
namedItem
因此,在
循环中的
for
/
中,
i
将上升到
array.length+2
,而不是
array.length-1
。由于
array[array.length+2]
不存在,它将返回
undefined
,并在您尝试访问它的属性时抛出错误


总是用

for (var i = 0, len = array.length; i < len; ++ i) {
  ...
}
for(变量i=0,len=array.length;i

使用数组。

您使用的是一个非常奇怪的循环

 for (var j in array) {
    // use array[i]
    ++ i
 }
问题是
。getElementsByTagName
不返回数组,而是返回类似数组的接口。例如:

>>> for (var j in document.getElementsByTagName('body')) console.log(j)
0
length
item
namedItem
因此,在
循环中的
for
/
中,
i
将上升到
array.length+2
,而不是
array.length-1
。由于
array[array.length+2]
不存在,它将返回
undefined
,并在您尝试访问它的属性时抛出错误


总是用

for (var i = 0, len = array.length; i < len; ++ i) {
  ...
}
for(变量i=0,len=array.length;i

使用数组。

你应该使用
divarray[j]
而不是
divarray[i]
。你应该使用
divarray[j]
而不是
divarray[i]
。我注意到代码有多奇怪,就删除了我原来的答案。我的意思是说这是一个foreach。我的天,我今天都搞糊涂了!后来我发现我的想法是对的,但做得不对。当我注意到代码有多奇怪时,我删除了我原来的答案。我的意思是说这是一个错误。我的天,我今天都搞糊涂了!后来我发现我的想法是正确的,但做得不对。算了吧,我将用更新的代码打开一个新问题。算了吧,我将用更新的代码打开一个新问题。