Question

Quel est le problème avec ce 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++;
}

L'erreur que je reçois est:

TypeError: Cannot read property 'className' of undefined

J'utilise Google Chrome.

Était-ce utile?

La solution

Vous utilisez une boucle très étrange.

 for (var j in array) {
    // use array[i]
    ++ i
 }

Le problème est .getElementsByTagName ne retourne pas un tableau, mais une interface semblable à un tableau. Par exemple:

>>> for (var j in document.getElementsByTagName('body')) console.log(j)
0
length
item
namedItem

Par conséquent, dans votre boucle for / in, i ira jusqu'à array.length + 2 au lieu de array.length - 1. Étant donné que array[array.length + 2] n'existe pas, il retournera undefined et jeter l'erreur lorsque vous essayez d'accéder à une propriété de celui-ci.


Il suffit de toujours utiliser

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

avec des tableaux.

Autres conseils

Vous initialisez articleHTML comme un tableau, alors vous configurez apparemment articleHTML à un HTMLElement (divarray[i]) mais le traiter comme un tableau (articleHTML[i]) - ce essaie effectivement d'obtenir la propriété i du HTMLElement que vous avez tiré sur divarray, qui n'existe pas, et vous essayez d'obtenir le className de cette valeur non définie.

Vouliez-vous dire:

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++;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top