1

我想获取某个类的所有元素并向它们添加顺序 ID,并将它们放入一个数组中。这是我到目前为止所拥有的。

(function(){
    for(var i = 1; i<$(".slideshow").length; i++){
        $(".slideshow").attr("id", "slides-" + i + "")
    }
});

发生的情况是它同时设置所有 .slideshow 类的 id,使它们都等于最后一个(实际上是倒数第二个,稍后会解决一个错误)

如何设置每个单独班级的 id?如果我执行每个循环:

$(".slideshow").each(function(){
    for(var i = 1; i<$(".slideshow").length; i++){
        $(".slideshow").attr("id", "slides-" + i + "")
    }
});

我该如何使用“这个”?

4

2 回答 2

2

由于传入.each()的回调函数有两个参数:第一,集合中元素的索引,第二,元素本身,你可以这样写:

$(".slideshow").each(function(i, el){
    el.id = 'slides-' + i;
});

由于id通常支持属性,因此此处无需使用$(el).attr('id', ...)构造。

请注意,此处的幻灯片索引从 0 开始。如果您想像原始代码(基于 1)一样执行此操作,请使用以下命令:

    el.id = 'slides-' + (i + 1);

i + 1子表达式周围的括号很重要,因为它们应该被添加,而不是连接。

如果没有括号,表达式将被处理为('slides' + i) + 1. 第一个+符号放在 String 和 Number 之间,因此将被视为连接运算符,给你一个String作为回报。所以 next+也变成了一个 concat op -例如,在 9时给你'slides-91'(而不是预期的'slides-10') 。i

如果您需要一个数组,只需使用jQuery 对象的.toArray()方法:

var slideShowNodes = $(".slideshow").each(function(i, el){
    el.id = 'slides-' + i;
}).toArray();
于 2013-07-14T17:36:19.620 回答
1

增加 ID,并将所有元素放入类似数组的 nodeList 中?

var arr = $(".slideshow").prop('id',function(i) {
    return "slides-" + i;
}).get();

小提琴

于 2013-07-14T17:36:31.933 回答