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

Google Chrome を使用しています。

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ループでは、の代わりにiup になります。は存在しないため、そのプロパティにアクセスしようとすると、エラーが返されてスローされます。array.length + 2array.length - 1array[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 に答える