如何使用 document.querySelectorAll 遍历选定的元素
How to loop through selected elements with document.querySelectorAll
我正在尝试循环使用document.querySelectorAll查询的选定元素,但是如何?
例如,我使用:
var checkboxes = document.querySelectorAll('.check');
for( i in checkboxes) {
console.log(checkboxes[i]);
}
输出:
<input id="check-1" class="check" type="checkbox" name="check">
<input id="check-2" class="check" type="checkbox" name="check">
<input id="check-3" class="check" type="checkbox" name="check">
<input id="check-4" class="check" type="checkbox" name="check">
<input id="check-5" class="check" type="checkbox" name="check">
<input id="check-6" class="check" type="checkbox" name="check">
<input id="check-7" class="check" type="checkbox" name="check">
<input id="check-8" class="check" type="checkbox" name="check">
<input id="check-9" class="check" type="checkbox" name="check">
<input id="check-10" class="check" type="checkbox" name="check" checked="">
10
item()
namedItem()
我的问题是最后此方法返回 3 个额外的项目。我怎样才能正确地做到这一点?
我最喜欢的是使用 spread 语法将 NodeList 转换为数组,然后使用 forEach
进行循环。
var div_list = document.querySelectorAll('div'); // returns NodeList
var div_array = [...div_list]; // converts NodeList to Array
div_array.forEach(div => {
// do something awesome with each div
});
我在 ES2015 中编码并使用 Babel.js,所以应该没有浏览器支持问题。
建议将for in
循环用于数组和类似数组的对象 - 您会看到原因。可以不仅仅是数字索引项,例如 length
属性或某些方法,但for in
将遍历所有这些项。使用任一
for (var i = 0, len = checkboxes.length; i < len; i++) {
//work with checkboxes[i]
}
或
for (var i = 0, element; element = checkboxes[i]; i++) {
//work with element
}
如果数组中的某些元素可能是伪造的(不是您的情况(,则无法使用第二种方法,但可以更具可读性,因为您不需要在任何地方使用[]
符号。
看起来Firefox 50+,Chrome 51+和Safari 10+现在都支持NodeList
对象的.forEach
功能。注意 — Internet Explorer 不支持.forEach
,因此请考虑上述方法之一,如果需要 IE 支持,请使用 polyfill。
https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach
const paragraphs = document.querySelectorAll('p');
paragraphs.forEach(p => console.log(p));
<p>paragraph 1</p>
<p>paragraph 2</p>
<p>paragraph 3</p>
<p>paragraph 4</p>
<p>paragraph 5</p>
在 ES6 中,有一个静态方法Array.from
利用Array
非静态方法(map、filter、...(:
Array.from(document.querySelectorAll('div')).forEach((element,index) =>
{
// handle "element"
});
自querySelector
以来Array.from
的另一个用途提供了item
方法:
var all = document.querySelectorAll('div');
// create range [0,1,2,....,all.length-1]
Array.from({length: all.length}, (v, k) => k).forEach((index) => {
let element = all.item(index);
});
一个不错的选择是:
[].forEach.call(
document.querySelectorAll('.check'),
function (el) {
console.log(el);
}
);
但正如所指出的,你应该使用 for 循环。
// for class
for (const elem of document.querySelectorAll('[class=".check"]')){
//work as per usual
};
// for name
for (const elem of document.querySelectorAll('[name="check"]')){
//work as per usual
};
// for id
for (const elem of document.querySelectorAll('[id="check-1"]')){
//work as per usual
};
这为我提供了想要使用什么元素的灵活性。
主要要点:
类型很重要。
.map
不会直接在NodeList
上工作,而是在Array
上工作。
比较这些: Array.prototype.map()
NodeList.forEach()
选项:
ES6 可用?
- 然后,点差运算符
[...element_list]
Array.map()
-
Array.from()
NodeList.forEach()
ES6 不可用?
-
NodeList.forEach()
- 一个"
for
循环">
最干净和最容易理解的是for of
语法。我的第二个选择是点差运算符(...
如果ES6可用(。最后,forEach
您是否正在构建大型应用程序,并且希望为大多数浏览器提供支持。
const lis = document.querySelectorAll('li')
let results = {
'for': [],
'forEach': [],
'three-dots': [],
}
// ES6 bellow
for (const li of lis) {
results['for'].push(li)
}
// ES6 above
[...lis].forEach((li) => results['three-dots'].push(li))
// Most browsers support it
lis.forEach(li => results['forEach'].push(li))
console.log({results})
<u>
<li>Item 01</li>
<li>Item 02</li>
<li>Item 03</li>
<li>Item 04</li>
<li>Item 05</li>
<li>Item 06</li>
<li>Item 07</li>
<li>Item 08</li>
</u>
能够使用任何常规 Array 方法的最短和最干净的方法,或者在您的情况下是 NodeList
上的for in
循环,是在获取时将其分散到数组中:
const checkboxes = [...document.querySelectorAll('.check')];
for (i in checkboxes) {
console.log(checkboxes[i]);
}
>您可以使用querySelectorAll
方法选择所有元素。它将返回一个节点列表数组。
假设您想选择所有 p 标签
<p>paragraph 1</p>
<p>paragraph 2</p>
<p>paragraph 3</p>
<p>paragraph 4</p>
<p>paragraph 5</p>
const paragraphs = document.querySelectorAll('p');
现在这些段落有一个 forEach 方法,可用于循环遍历节点列表
paragraphs.forEach(console.log); (logs node)
- 遍历类元素数组,并在jquery中选择同级元素
- Jquery遍历表元素
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 如何使用 document.querySelectorAll 遍历选定的元素
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- js循环遍历单击的元素子节点
- 循环遍历元素jquery选择器
- 如何使用jquery遍历具有动态添加元素的数组
- JavaScript元素遍历返回的值超出预期
- 遍历jQuery中的表元素
- 使用 jquery .find() 遍历按类和存储属性选择元素
- 带有 ng-repeat 的 Angular JS 指令无法遍历子元素
- 遍历 DOM 以查找哪个元素具有焦点
- 循环遍历 DOM 元素时,是否有 for 循环的替代方法
- 遍历(获取)元素包装在 标记内
- 如何遍历 d3 中的值内部数组并添加相应的子元素
- JQuery/Javascript - 遍历值之后的所有 json 元素
- 遍历django模板中的json元素
- 如何在遍历表和添加新元素时获得tr的索引
- findout js代码遍历DOM中的哪个元素