Maison  >  Article  >  interface Web  >  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
DDDoriginal
2024-10-20 06:38:30960parcourir

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;
}

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
    });
}

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!

Déclaration:
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