3 votes

Javascript 'Node' indéfini dans IE8 et en dessous

Je possède le code suivant qui semble fonctionner correctement dans tous les navigateurs sauf IE8 et versions antérieures.

$("table.availability").each( function() {
    var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text();
    alert(sitename);
});

Cela récupère le contenu d'un élément et supprime tout ce qui est contenu dans un élément enfant pour ne laisser que le texte de cet élément.

L'erreur que je reçois indique que Node est indéfini - alors je le déclare en haut du fichier js et puis je reçois le même message concernant TEXT_NODE alors je le déclare. Ensuite, j'obtiens l'erreur suivante:

Impossible d'obtenir la propriété 'TEXT_NODE' d'une référence indéfinie ou nulle

Est-ce que quelqu'un peut m'aider à résoudre cela ou peut-être proposer un meilleur moyen d'obtenir le même résultat. Merci.

8voto

James Allardice Points 81162

La constante TEXT_NODE a une valeur de 3. Vous pouvez simplement l'utiliser :

return this.nodeType === 3;

Les anciennes versions d'IE n'implémentent simplement pas l'interface Node, mais elles respectent toujours la spécification DOM et attribuent les bonnes valeurs de propriété nodeType.

Si vous voulez utiliser la "constante", vous pouvez déclarer vous-même un objet Node :

var Node = Node || {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3
    // etc... si vous pourriez avoir besoin d'autres types de nœuds
};

1voto

priyanka_rao Points 405

Pour IE8 et les versions inférieures, le noeud ne fonctionne pas, changer node en window a fonctionné pour moi.

0voto

tborychowski Points 3920

Je suppose que votre structure ressemble à ceci :

    texte à filtrer
    autre texte

Et vous essayez de filtrer le "autre texte" à l'intérieur du h2 ? Si c'est le cas - pourquoi ne pas ajouter une autre balise autour du texte dont vous avez besoin, par exemple

    texte à filtrer
    autre texte

et faire cela :

$(this).parent().siblings("h2").find('.text-to-filter').text()

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