遍历节点列表的有效方法?
efficient way to loop through nodelist?
我经常需要遍历网页中的元素,获取一些属性,并将它们发送到服务器。
我有一个由 user_id 组成的列表,每个 div:
<div class="user-box" user_id="1">
//stuff
</div>
<div class="user-box" user_id="2">
//stuff
</div>
<div class="user-box" user_id="3">
//stuff
</div>
<div class="user-box" user_id="4">
//stuff
</div>
使用jQuery:
let ids = "";
$(".user-box").each(function(){
ids+= $(this).attr("user_id")+"|"
})
ids 变量看起来像这样“1|2|3|4|”
我试过这样使用 map/reduce:
function doStuff(selector, attribute,separator) {
let mySring = Array.from(
document.querySelectorAll(selector)).map(
x => x.getAttribute(attribute)).reduce(
(acc, cv) => acc + separator + cv);
return myString
}
let x = doStuff(".user-box","user_id","|");
我得到了相同的结果。
如何使用 javascript 而不是 jQuery 来做到这一点?
除了不同的缩进,您还可以:
- 使用
join
而不是 reduce
来插入分隔符。这也将避免在最后添加分隔符。
- 避免创建一个中间数组:使用
Array.from
的回调参数
如下:
function doStuff(selector, attribute, separator) {
return Array.from(
document.querySelectorAll(selector),
x => x.getAttribute(attribute)
).join(separator);
}
关于reduce
的备注:您在没有初始值参数的情况下使用它。请注意,如果您这样做,并且调用它的数组为空(没有匹配选择器),您将收到错误消息。
我经常需要遍历网页中的元素,获取一些属性,并将它们发送到服务器。
我有一个由 user_id 组成的列表,每个 div:
<div class="user-box" user_id="1">
//stuff
</div>
<div class="user-box" user_id="2">
//stuff
</div>
<div class="user-box" user_id="3">
//stuff
</div>
<div class="user-box" user_id="4">
//stuff
</div>
使用jQuery:
let ids = "";
$(".user-box").each(function(){
ids+= $(this).attr("user_id")+"|"
})
ids 变量看起来像这样“1|2|3|4|”
我试过这样使用 map/reduce:
function doStuff(selector, attribute,separator) {
let mySring = Array.from(
document.querySelectorAll(selector)).map(
x => x.getAttribute(attribute)).reduce(
(acc, cv) => acc + separator + cv);
return myString
}
let x = doStuff(".user-box","user_id","|");
我得到了相同的结果。
如何使用 javascript 而不是 jQuery 来做到这一点?
除了不同的缩进,您还可以:
- 使用
join
而不是reduce
来插入分隔符。这也将避免在最后添加分隔符。 - 避免创建一个中间数组:使用
Array.from
的回调参数
如下:
function doStuff(selector, attribute, separator) {
return Array.from(
document.querySelectorAll(selector),
x => x.getAttribute(attribute)
).join(separator);
}
关于reduce
的备注:您在没有初始值参数的情况下使用它。请注意,如果您这样做,并且调用它的数组为空(没有匹配选择器),您将收到错误消息。