2011-02-08 7 views
4

選択を変更するほとんどのjQuery関数呼び出しでは、endを使用して選択のステップに戻ることができます。例:jQueryプラグインをend()にするにはどうすればよいですか?

$('#myElement').parent().show().end().css('color', '#ff0000'); 

これは親要素を表示し、元の選択を赤にします。

しかし、選択をフィルタリングする独自のjQueryプラグインを定義すると、この機能は使用できません。例えば:私は今$('#myElement').nextBarOne().show().end()を行う場合

$.fn.nextBarOne = function(selector) { 
    var ret = this.next().next(); 

    return (typeof selector === 'undefined') ? ret : ret.filter(selector); 
} 

私は、元の選択に戻りません。明らかにこれは内部的には関数がnextを2回呼び出してからfilterを呼び出すためです。

組み込み関数のようにendを使用できるようにjQueryプラグインを定義するにはどうすればよいですか?

+0

"pushStack" のためのjQueryのソースのルック。基本的には、jQueryの "find"、 "parents"などの関数と同じようにコードを呼び出します。 – Pointy

+1

plugin.showRespectTo(end); –

答えて

3

.next()を使用してトラバースした後に元のjQueryオブジェクトをポイントすると、prevObjectが設定されます。

$.fn.nextBarOne = function(selector) { 
    var self = this, 
     ret = (typeof selector === 'undefined') ? 
       this.next().next() : this.next().next().filter(selector); 
    ret.prevObject = self; 
    return ret; 
} 

EDIT:おそらくクリーナーpushStack()

。また、セレクタをpushStackコールに含めました。

$.fn.nextBarOne = function(selector) { 
    var ret = (typeof selector === 'undefined') ? 
       this.next().next() : this.next().next().filter(selector); 
    return this.pushStack(ret, "nextBarOne", selector || "");   
} 

An example here

+0

私はそれが "pushStack"関数だと思います... – Pointy

+0

私はあなたが正しいと思っています@Pointy、ちょうどソースを見て... –

+3

http://www.bennadel.com/blog/1739-Using-PushStack- In-jQuery-Plugins-To-Create-New-Collections.htm – jAndy

関連する問題