Код не работает, не могу прочитать свойство «ClassName» undefined
-
30-09-2019 - |
Вопрос
Что не так с этим кодом?
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.
Решение
Вы используете очень странный цикл.
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) {
...
}
с массивами.
Другие советы
Вы инициализируете articleHTML
в качестве массива, то вы видимо настроить articleHTML
к htmlelement (divarray[i]
) но затем относиться к этому как массив (articleHTML[i]
) - это на самом деле пытается получить i
свойство htmlelement, которое вы вытащили из divarray
, который не существует, а затем вы пытаетесь получить className
из этого неопределенного значения.
Ты имел ввиду:
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++;
}