Maison > interface Web > js tutoriel > le corps du texte

Pourquoi \'L'objet ne prend pas en charge la propriété ou la méthode \'forEach\'\' est-il lancé pour les collections DOM dans les navigateurs Microsoft ?

Susan Sarandon
Libérer: 2024-10-20 06:43:29
original
199 Les gens l'ont consulté

Why is

Problèmes avec forEach() dans les navigateurs Microsoft pour les collections DOM

En tant que développeurs, nous nous appuyons souvent sur la méthode forEach() pour parcourir et manipuler les collections DOM. Cependant, nous pouvons rencontrer l'erreur frustrante « L'objet ne prend pas en charge la propriété ou la méthode 'forEach' » dans Internet Explorer 11 et Edge.

Comprendre les collections DOM

Pour pour résoudre ce problème, nous devons comprendre que les méthodes DOM comme querySelectorAll renvoient des collections, à savoir NodeList ou HTMLCollection, qui ne prennent pas intrinsèquement en charge forEach().

  • NodeList : Représente un instantané de éléments correspondants, ne reflète pas automatiquement les modifications du DOM.
  • HTMLCollection :Semblable à NodeList mais en direct, reflétant les modifications dans le DOM.

Polyfilling forEach ()

Puisque NodeList est spécifié pour avoir forEach(), nous pouvons le polyfill en toute sécurité :

<code class="js">if (typeof NodeList !== "undefined" &amp;&amp; NodeList.prototype &amp;&amp; !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
}</code>
Copier après la connexion

Assurer l'itérabilité

NodeList et HTMLCollection sont itérables, mais les anciens navigateurs peuvent ne pas l'implémenter. Nous pouvons également polyfiller l'itérabilité :

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

Avec ces polyfills en place, nous pouvons utiliser avec succès forEach() sur NodeList et HTMLCollection même dans IE11 et Edge.

Exemple d'utilisation

<code class="js">var color_btns = document.querySelectorAll('#color > p');
color_btns.forEach(function(color) {
    // Our custom logic here...
});</code>
Copier après la connexion

Considérations supplémentaires

Certaines bibliothèques DOM héritées peuvent être confondues en ajoutant forEach() à HTMLCollection. Dans de tels cas, polyfill forEach() uniquement sur NodeList.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!