Home Web Front-end JS Tutorial Why Does Iterating an HTMLCollection with `for/of` Sometimes Fail, and What Are the Alternatives?

Why Does Iterating an HTMLCollection with `for/of` Sometimes Fail, and What Are the Alternatives?

Dec 05, 2024 am 11:04 AM

Why Does Iterating an HTMLCollection with `for/of` Sometimes Fail, and What Are the Alternatives?

Iterating an HTMLCollection with for/of

When attempting to iterate an HTMLCollection using for/of, you may encounter unexpected results. Let's delve into why this occurs and explore alternative approaches for iterating HTMLCollection elements.

Why for/in Fails

The issue with using for/in is that it iterates over the object's properties, not its elements. An HTMLCollection is an array-like object, meaning it contains elements at indices. However, it also has properties like length and namedItem.

When you use for/in on an HTMLCollection, it will return both the element indexes (0, 1, 2, ...) and the collection properties. This leads to unexpected output, where some iterations return element IDs while others are undefined (non-element properties).

Alternative Iteration Methods

To avoid these issues, there are several alternatives to for/in:

  • for/of Loop:

    Modern browsers support for/of iteration of HTMLCollection and NodeList objects. This is the simplest and most straightforward approach.

      var list = document.getElementsByClassName("events");
      for (let item of list) {
       console.log(item.id);
      }
    Copy after login
  • Array.from():

    ES6 introduced the Array.from() method, which converts an array-like object to an actual array. You can then iterate over it using for/of.

    Array.from(document.getElementsByClassName("events")).forEach(item => {
        console.log(item.id);
    });
    Copy after login
  • Manually Adding the Array Iterator:

    In browsers that don't support for/of natively, you can manually add the Array iterator to the HTMLCollection or NodeList prototype.

    NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
    HTMLCollection.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
    
    // Use for/of as with modern browsers
    for (let item of list) {
        console.log(item.id);
    }
    Copy after login
  • for Loop with Length Property:

    A more traditional approach is to use a for loop that iterates up to the length of the collection.

    var list = document.getElementsByClassName("events");
    for (var i = 0; i < list.length; i++) {
        console.log(list[i].id);
    }
    Copy after login

By utilizing these alternative methods, you can effectively iterate over the elements of an HTMLCollection and access their properties, including their IDs.

The above is the detailed content of Why Does Iterating an HTMLCollection with `for/of` Sometimes Fail, and What Are the Alternatives?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

Hot Article

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Replace String Characters in JavaScript Replace String Characters in JavaScript Mar 11, 2025 am 12:07 AM

Replace String Characters in JavaScript

jQuery Check if Date is Valid jQuery Check if Date is Valid Mar 01, 2025 am 08:51 AM

jQuery Check if Date is Valid

jQuery get element padding/margin jQuery get element padding/margin Mar 01, 2025 am 08:53 AM

jQuery get element padding/margin

Top 5 Date Manipulation JS Plugins Top 5 Date Manipulation JS Plugins Feb 28, 2025 am 12:34 AM

Top 5 Date Manipulation JS Plugins

10 jQuery Accordions Tabs 10 jQuery Accordions Tabs Mar 01, 2025 am 01:34 AM

10 jQuery Accordions Tabs

10 Worth Checking Out jQuery Plugins 10 Worth Checking Out jQuery Plugins Mar 01, 2025 am 01:29 AM

10 Worth Checking Out jQuery Plugins

jquery add scrollbar to div jquery add scrollbar to div Mar 01, 2025 am 01:30 AM

jquery add scrollbar to div

HTTP Debugging with Node and http-console HTTP Debugging with Node and http-console Mar 01, 2025 am 01:37 AM

HTTP Debugging with Node and http-console

See all articles