- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 React.js 组件中迭代 HTMLCollection 时遇到问题。我有以下功能:
shuffleLists = () => {
var elems = document.getElementsByTagName("ul");
console.log(elems)
for (let item of elems) {
console.log(item);
}
}
console.log(elems)
按预期打印出 ul
元素的 HTMLCollection。但是当我希望在控制台中看到每个 ul
元素时,它不会在控制台中打印任何内容后的 for 循环。我做错了什么?
为清楚起见编辑:
这里的关键问题是循环内的 console.log(item)
行不会将任何内容输出到 chrome 开发工具的控制台中,这同样适用于所讨论的其他各种循环语法在下面的答案和评论中。
我还注意到,在不同的浏览器之间,console.log(elems)
记录的长度不同。在 chrome 中,我看到 HTMLCollection[] length: 10 ...
但是在 Firefox 中我看到HTMLCollection {length 0} ...
最佳答案
for 循环中的 item
实际上是键(数组索引)。您需要使用语法 elems[item]
从 elems
数组中获取特定元素。
重构您的代码(并将 item
更改为 key
,只是为了清楚起见):
shuffleLists = () => {
var elems = document.getElementsByTagName("ul");
console.log(elems);
for (let key of elems) {
console.log(elems[key]);
}
}
更新:因为 getElementsByTagName()
的结果是一个 NodeList
shuffleLists = () => {
var elems = document.getElementsByTagName("ul");
console.log(elems);
elems.forEach(function(val) {
console.log(val);
})
}
Although
NodeList
is not anArray
, it is possible to iterate over it withforEach()
. It can also be converted to a realArray
usingArray.from()
.However, some older browsers have not implemented
NodeList.forEach()
norArray.from()
. This can be circumvented by usingArray.prototype.forEach()
.
根据OP的更新要求
shuffleLists = () => {
var ulElems = document.getElementsByTagName("ul");
console.log(ulElems);
for(i = 0; i < ulElems.length; i++) {
var liElems = ulElems[i].getElementsByTagName("li");
for(j = 0; j < liElems.length; j++) {
console.log(liElems[j].innerHTML);
}
}
}
关于reactjs - 在 React,js 中遍历 HTMLcollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476859/
我是一名优秀的程序员,十分优秀!