Функция next()
jQuery возвращает следующего брата по мере его появления в дереве DOM (не в наборе результатов jQuery) для всех соответствующих элементов. Так зовут
$("#container .swaps:first")
получает первый якорь, и вызов next()
для него возвращает неопределенное значение, поскольку у него нет следующего брата. Я думаю, что вы, возможно, захотите реализовать шаблон Iterator , если вы хотите получить доступ к узлам последовательно, вызвав next()
.
Объект jQuery - это массив элементов. Вы можете просто сохранить текущий индекс в переменной и увеличить его после получения следующего элемента.
// Naive way
var items = $("#container .swaps");
var i = 0;
items[i++] // first <a>
items[i++] // second <a>
Вот две реализации, которые обертывают вышеуказанную функциональность с использованием шаблона Iterator - одна, которая работает как плагин jQuery, другая по сути является отдельной функцией. Оба работают одинаково:
// Iterator function
function Iterator(list) {
var results = list;
var i = 0;
this.next = function() {
return results[i++];
};
return this;
}
// Usage
var iterator = Iterator($("#container .swaps"));
iterator.next() // first <a>
iterator.next() // second <a>
Второй почти идентичен первому, но вместо него используется плагин jQuery:
// jQuery plugin
$.fn.iterator = function() {
var i = 0;
this.next = function() {
return this[i++];
};
return this;
};
// Usage
var iterator = $("#container .swaps").iterator();
iterator.next() // first <a>
iterator.next() // second <a>
Javascript 1.7 имеет несколько интересных функций в генераторах и итераторах для выполнения именно этого, но пока он не получил широкого распространения - насколько мне известно, его поддерживает только Firefox.