我想获取某个类的所有元素并向它们添加顺序ID,并将它们放在一个数组中。 这是我到目前为止所做的。
(function(){
for(var i = 1; i<$(".slideshow").length; i++){
$(".slideshow").attr("id", "slides-" + i + "")
}
});
它会同时设置所有.slideshow类的id,使它们全部等于最后一个(实际上倒数第二个,后面会出现一个bug)。
如何设置每个班级的ID?如果我做每个循环:
$(".slideshow").each(function(){
for(var i = 1; i<$(".slideshow").length; i++){
$(".slideshow").attr("id", "slides-" + i + "")
}
});
我如何使用“这个”?
答案 0 :(得分:2)
由于传递给.each()的回调函数需要两个参数:第一个是集合中元素的索引,第二个是元素本身,你可以这样写:
$(".slideshow").each(function(i, el){
el.id = 'slides-' + i;
});
由于id
属性通常受支持,因此无需在此处使用$(el).attr('id', ...)
构造。
请注意,幻灯片的索引从0开始。如果你想在原始代码(从1开始)中这样做,请使用:
el.id = 'slides-' + (i + 1);
围绕i + 1
子表达式的括号是至关重要的,因为这些应该被添加,而不是连接。
如果没有parens,表达式将被处理为('slides' + i) + 1
。第一个+
符号位于字符串和数字之间,因此将被视为连接运算符,为您提供String
作为回报。因此,当+
为9时,下一个'slides-91'
也会成为连续性 - 为您提供'slides-10'
(而不是预期的i
)。
如果您需要一个数组,只需使用jQuery对象的.toArray()方法:
var slideShowNodes = $(".slideshow").each(function(i, el){
el.id = 'slides-' + i;
}).toArray();
答案 1 :(得分:1)
增加ID,并将所有元素放在类似数组的nodeList中?
var arr = $(".slideshow").prop('id',function(i) {
return "slides-" + i;
}).get();