为类添加ID

时间:2013-07-14 17:33:48

标签: jquery

我想获取某个类的所有元素并向它们添加顺序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 + "")
    }
});

我如何使用“这个”?

2 个答案:

答案 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();

FIDDLE