8
votes

Convertir une nodéliste en tableau

J'ai du mal à convertir un NODELIST à un tableau dans IE 8. Les travaux suivants sont parfaitement en chrome, mais dans IE 8 toarray () n'est pas reconnu comme valide: xxx

J'ai essayé d'ajouter une fonction de prototype à un tableau juste pour vérifier ma santé mentale et fonctionne correctement. Cela me fait penser que c'est-à-dire que 8 ne renvoie pas réellement un nodeliste ? Voici un exemple complet:

http://jsfiddle.net/e4rbh/

Qu'est-ce que je fais mal?


1 commentaires

Il n'y a pas de norme actuelle qui dit que NODELIST doit être une fonction de constructeur visible et altérable, ou que s'il existe une fonction de constructeur visible comme NODELIST qu'il sera utilisé comme Le type de retour de toutes les méthodes de retour de NODELIST. (Après tout, un enfantNODES NODELIST et un getelementsbytagname NODELIST font des choses très différentes.) Le prototypage sur les objets JS natifs est spécifié par la norme ECMAScript et est fiable; Le prototypage sur des nœuds DOM et d'autres objets non définis par la norme de langue n'est pas fiable et doit être évité.


4 Réponses :


1
votes

Ie ne prend pas en charge NODELIST de la manière standard. C'est pourquoi vous devez rouler votre propre espace de noms et ne pas étendre les objets de base du navigateur.

Vous pouvez faire une alerte (typeof window.nodelist) et voir s'il est indéfini ou non.


2 commentaires

Dans chrome, il est , dans IE 8 c'est objet , pas non défini . De toute façon, cela déboguait de l'ancien code que j'ai maintenant refoulé dans un espace de noms que j'ai déjà eu.


Vous devez avoir une version plus récente de IE8 'car la mine est indéfinie.



3
votes

2 commentaires

J'utilisais getelementytagname , mais basculé sur document.all pendant les tests. Cela faisait partie d'un problème plus important et j'ai essayé de le simplifier. Le vrai problème a fini par être une méthode d'extension sur TRAY qui a été mal implémentée et affectée d'autres codes.


Bons commentaires mais ne répond pas à la question



5
votes

Une ancienne question, mais voici une méthode éprouvée: xxx

explication

  • document.queryselectorall utilise un sélecteur de style CSS pour rechercher des éléments et renvoie une liste de nœuds. Cela fonctionne à partir de 8.
  • La tranche copie une partie d'une collection de type tableau (dans ce cas tout cela) dans un nouveau tableau.
  • appel vous permet d'emprunter une méthode d'un objet à utiliser sur un autre

    Pour trouver la liste des nœuds que vous avez peut également utiliser `document.getelementsbyTagname (), mais celui-ci est plus flexible.


1 commentaires

Vous ne pouvez pas appeler des tranches sur une nodéliste dans IE8: \



10
votes

Si vous recherchez une réponse moderne en utilisant ES6:

https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/array/from xxx


1 commentaires

Vous pouvez également utiliser l'opérateur de diffusion const Array = [... nœuds]