1

这段代码有什么问题?

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

我正在使用谷歌浏览器。

4

3 回答 3

3

您正在使用一个非常奇怪的循环。

 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/in循环中,i将上升到array.length + 2而不是array.length - 1. 由于array[array.length + 2]不存在,undefined当您尝试访问它的属性时,它将返回并抛出错误。


只是总是使用

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

与数组。

于 2010-05-18T19:30:59.450 回答
2

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

于 2010-05-18T19:30:59.310 回答
1

你的意思是:

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++;
}
于 2010-05-18T19:26:16.017 回答