Maison > interface Web > js tutoriel > Pourquoi forEach sur querySelectorAll ne se comporte-t-il pas comme prévu dans les navigateurs Microsoft ?

Pourquoi forEach sur querySelectorAll ne se comporte-t-il pas comme prévu dans les navigateurs Microsoft ?

DDD
Libérer: 2024-10-20 06:38:30
original
1033 Les gens l'ont consulté

Why is forEach on querySelectorAll Not Behaving as Expected in Microsoft Browsers?

forEach sur querySelectorAll ne se comporte pas comme prévu dans les navigateurs Microsoft : un examen complet et une solution

Les navigateurs Internet Explorer et Edge présentent un défi unique pour les développeurs utilisant forEach() sur le résultat querySelectorAll. Bien que la méthode soit bien prise en charge dans la plupart des autres navigateurs, IE et Edge rencontrent des difficultés en raison des méthodes DOM et des propriétés de collection utilisées.

Les distinctions NodeList et HTMLCollection

Contrairement aux instances NodeList de type tableau , qui représentent un instantané statique des éléments correspondants, les instances HTMLCollection sont des collections dynamiques dont les modifications sont reflétées en temps réel. La méthode forEach() n'a été implémentée que récemment dans NodeList, alors que HTMLCollection ne la prend pas en charge. Cependant, les deux collections sont itérables, ce qui leur permet d'être développées en tableaux ou itérées à l'aide de la boucle for-of ou de la propriété Symbol.iterator.

Polyfilling forEach() et Iterable Behavior

To Pour remédier à l'absence de forEach() dans NodeList, un simple polyfill peut être implémenté :

if (typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
}
Copier après la connexion

De même, si un navigateur ne dispose pas de la propriété Symbol.iterator sur NodeList ou HTMLCollection, il peut également être polyfill :

if (typeof Symbol !== "undefined" && Symbol.iterator && typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype[Symbol.iterator]) {
    Object.defineProperty(NodeList.prototype, Symbol.iterator, {
        value: Array.prototype[Symbol.iterator],
        writable: true,
        configurable: true
    });
}
Copier après la connexion

Conclusion

En comprenant les différences entre NodeList et HTMLCollection et en tirant parti de la puissance des polyfills, les développeurs peuvent garantir que la méthode forEach() fonctionne de manière transparente sur tous les navigateurs, y compris Internet Explorer et Bord. Les exemples de code fournis permettent aux développeurs d'implémenter facilement ces polyfills et de restaurer le comportement attendu de forEach() dans les navigateurs Microsoft.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal