为 HTMLCollection 元素循环

在前端开发中,我们经常需要处理多个 DOM 元素,例如获取所有某个标签的元素列表。此时,我们可以使用 document.getElementsByTagNamedocument.getElementsByClassName 等方法获取一个 HTMLCollection 对象。HTMLCollection 是一个类数组对象,它包含了一组按照文档顺序排列的元素,但是它并不是一个真正的数组,因此不能使用数组的方法进行遍历操作。

如何对 HTMLCollection 进行遍历操作呢?这就需要用到 JavaScript 中的迭代器 Iterator 和 for...of 循环语句。下面通过示例代码详细介绍如何对 HTMLCollection 元素进行循环操作。

使用 for 循环遍历 HTMLCollection

最简单的方式是使用 for 循环对 HTMLCollection 进行遍历,示例代码如下:

----- -------- - -----------------------------------

--- ---- - - -- - - ---------------- ---- -
  -------------------------
-

上述代码中,首先使用 document.getElementsByTagName('p') 方法获取了所有 <p> 元素,并将返回值保存在 elements 变量中。然后使用 for 循环遍历 elements 变量,输出每个元素的内容。

这种方式虽然简单,但是存在一些问题。由于 HTMLCollection 不是一个真正的数组,因此它的长度可能会随着循环过程中元素的增加或减少而改变。当 HTMLCollection 的长度改变时,for 循环的终止条件也会随之改变,可能导致意料之外的结果。

使用迭代器遍历 HTMLCollection

为了解决上述问题,我们可以使用迭代器 Iterator 对 HTMLCollection 进行遍历。对于 HTMLCollection,我们可以使用 Symbol.iterator 方法获取其默认迭代器,示例代码如下:

----- -------- - -----------------------------------

----- -------- - ----------------------------

--- ---- - ----------------
----- ------------ -
  ------------------------
  ---- - ----------------
-

上述代码中,首先使用 document.getElementsByTagName('p') 方法获取所有 <p> 元素,并将返回值保存在 elements 变量中。然后使用 elements[Symbol.iterator]() 方法获取 elements 默认迭代器,并将迭代器保存在 iterator 变量中。接着使用 while 循环和迭代器的 next() 方法遍历 HTMLCollection 中的每个元素,并输出其内容。

使用迭代器遍历 HTMLCollection 的好处是,即使 HTMLCollection 长度发生变化,迭代器仍然能够正确地遍历所有元素。

使用 for...of 循环遍历 HTMLCollection

ES6 引入了 for...of 循环语句,它可以更方便地遍历可迭代对象,HTMLCollection 也是一个可迭代对象,因此我们可以使用 for...of 循环遍历 HTMLCollection,示例代码如下:

----- -------- - -----------------------------------

--- ------ ------- -- --------- -
  ---------------------
-

上述代码中,使用 document.getElementsByTagName('p') 方法获取所有 <p> 元素,并将返回值保存在 elements 变量中。然后使用 for...of 循环语句遍历 elements 变量,输出每个元素的内容。

使用 for...of 循环语句可以更加简洁明了地遍历 HTMLCollection,它也不会受到 HTMLCollection 长度变化的影响。

总结

本文介绍了三种遍历 HTMLCollection 元素的方法:for 循环、迭代器和 for...of 循环语句。对于数量较少的元素,使用 for 循环即可;对于数量较多的元素,建议使用迭代器或者 for...of 循环

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/9921