2013-07-14 2 views
1

Я хотел бы получить все элементы определенного класса и добавить к ним последовательные идентификаторы, а также поместить их в массив. Вот что я до сих пор.Добавление идентификаторов для классов

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

Что происходит, он устанавливает идентификатор всех .slideshow классов в то же время, что делает их все равно до последнего (на самом деле второй до последнего, ошибка, будет разработана позже)

Как установить идентификатор каждого отдельного класса? Если я делаю каждый цикл:

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

Как использовать «это», может быть?

ответ

2

В качестве функции обратного вызова передается в .each() принимает два Params: первый индекс элемента в коллекции, второй, сам элемент, вы можете написать это так:

$(".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. Таким образом, следующий + также станет concat op - давая вам 'slides-91' (и не ожидаемый 'slides-10'), когда i составляет 9, например.

Если вам нужен массив в качестве результата, используйте только .toArray() метод объекта JQuery:

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

Попался, и спасибо! И это очень короткий короткий код! –

1

приращений ID, и помещает все элементы в массиве типа Nodelist?

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

FIDDLE

Смежные вопросы