jQuery 的next()
函数返回所有匹配元素的下一个兄弟,因为它们出现在 DOM 树中(不在 jQuery 结果集中)。所以打电话
$("#container .swaps:first")
获取第一个锚点,并调用next()
它返回 undefined 因为它没有下一个兄弟。如果您想通过调用连续访问节点,我认为您可能需要实现迭代器模式next()
。
jQuery 对象是一个项目数组。您可以将当前索引存储在一个变量中,并在获取下一个元素后递增它。
// Naive way
var items = $("#container .swaps");
var i = 0;
items[i++] // first <a>
items[i++] // second <a>
这里有两个使用迭代器模式包装上述功能的实现——一个作为 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 支持它。