What is wrong with this code?
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++;
}
The error I get is:
TypeError: Cannot read property 'className' of undefined
I am using Google Chrome.
You’re using a very strange loop.
The problem is
.getElementsByTagNamedoesn’t return an array, but an array-like interface. For example:Therefore, in your
for/inloop,iwill go up toarray.length + 2instead ofarray.length - 1. Sincearray[array.length + 2]does not exist, it will returnundefinedand throw the error when you try to access a property of it.Just always use
with arrays.