jQuery のnext()
関数は、一致したすべての要素について、(jQuery の結果セットではなく) DOM ツリーに表示される次の兄弟を返します。そう呼ぶ
$("#container .swaps:first")
最初のアンカーを取得し、それを呼び出すと、next()
次の兄弟がないため undefined が返されます。を呼び出してノードに連続してアクセスしたい場合は、 Iterator パターンを実装するとよいと思いますnext()
。
jQuery オブジェクトは項目の配列です。現在のインデックスを変数に格納し、次の要素を取得した後にインクリメントすることができます。
// Naive way
var items = $("#container .swaps");
var i = 0;
items[i++] // first <a>
items[i++] // second <a>
Iterator パターンを使用して上記の機能をラップする 2 つの実装を次に示します。1 つは jQuery プラグインとして機能し、もう 1 つは基本的に別の関数です。どちらも同じように動作します:
// 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>
2 番目のものは最初のものとほとんど同じですが、代わりに 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 だけがサポートしています。