2 votes

JavaScript getAttribute ne fonctionne pas

var objects = document.getElementsByTagName('object');
for (var i=0, n=objects.length;i<n;i++) {
    objects[i].style.display='none';
    var swfurl;
    var j=0;
    while (objects[i].childNodes[j]) {
    if (objects[i].childNodes[j].getAttribute('name') == 'movie') {
            /* DO SOMETHING */ 
    }
    j++;
}
    var newelem = document.createElement('div');
    newelem.id = '678297901246983476'+i;
    objects[i].parentNode.insertBefore(newelem, objects[i]);
    new Gordon.Movie(swfurl, {id: '678297901246983476'+i, width: 500, height: 400});
}

Il est indiqué que getAttribute n'est pas une fonction de childNodes[j]. Quel est le problème ? Je ne vois pas le problème.

8voto

T.J. Crowder Points 285826

Rappelez-vous que childNodes comprend des nœuds de texte (et des nœuds de commentaire, le cas échéant, et des instructions de traitement, le cas échéant, etc.) N'oubliez pas de vérifier le nodeType avant d'essayer d'utiliser des méthodes qui ne Element s ont.

Mise à jour : Ici, en 2018, vous pourriez utiliser children à la place, qui ne comprend que Element les enfants. Il est supporté par tous les navigateurs modernes, et par IE8-IE11. (Il y a quelques bizarreries dans les anciens IE, voir le lien pour un polyfill pour les aplanir).

6voto

Tim Down Points 124501

Vérifiez le nodeType est égale à 1 (ce qui signifie que le nœud est un élément) avant d'appeler des méthodes spécifiques à l'élément, comme la méthode getAttribute() . Aussi, oubliez getAttribute() y setAttribute() Vous n'en avez presque jamais besoin, elles ne fonctionnent pas dans IE et ne font pas ce que vous pensez. Utilisez plutôt les propriétés DOM équivalentes. Dans ce cas :

var child = objects[i].childNodes[j];
if (child.nodeType == 1 && child.name == 'movie') {
    /* DO SOMETHING */ 
}

-5voto

volpav Points 5024

Quel navigateur utilisez-vous ? Si c'est IE, vous devez utiliser readAttribute à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X