我正在使用babel-polyfill,并且尝试使用for-of循环迭代 HTMLCollection 对象:

const elements = document.getElementsByClassName('some-class')
for (const element of elements) {
  console.log(element)
}

没用我收到错误elements[Symbol.iterator] is not a function。如何使其正常工作?

最佳答案

"Iterable DOM collections" on the core-js GitHub page:



如您所见,该列表不包含HTMLCollection。为了能够对HTMLCollection使用for-of循环,您必须手动将Array.prototype.values分配给HTMLCollection.prototype[Symbol.iterator]。请参阅以下示例:

HTMLCollection.prototype[Symbol.iterator] = Array.prototype.values

for (const element of document.getElementsByTagName('a')) {
  console.log(element.href)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.min.js"></script>
<a href="//www.google.com">Google</a>
<a href="//www.github.com">GitHub</a>


另外,您可以只使用 document.querySelectorAll() ,它返回一个NodeList对象。

关于javascript - 使用for-of循环迭代HTMLCollection对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39780789/

10-10 00:34