重複の可能性:
jQuery pushStack 関数はどのように機能しますか?
jQuery API で function を見ましたpushStack
。説明は次のように述べています。Add a collection of DOM elements onto the jQuery stack.
jQuery スタックとは何か、何に使用できるか知っている人はいますか? DOMとの関係はありますか?
重複の可能性:
jQuery pushStack 関数はどのように機能しますか?
jQuery API で function を見ましたpushStack
。説明は次のように述べています。Add a collection of DOM elements onto the jQuery stack.
jQuery スタックとは何か、何に使用できるか知っている人はいますか? DOMとの関係はありますか?
複数の jQuery メソッドを連結し、各メソッドが新しい jQuery オブジェクトを返す場合、jQuery はスタック内のすべての jQuery オブジェクトを追跡します。これにより、ローカル変数に保存することなく、以前に使用した jQuery オブジェクトに戻ることができます。これを機能させるために、jQuery メソッドは、メソッド呼び出しの結果として新しい jQuery オブジェクトを作成するときにpushStack()
、新しいオブジェクトがスタックに参加できるようにするために呼び出します。
jQuery メソッドは、1 つの項目をスタックに戻して前の jQuery オブジェクトを取得し、複数回呼び出してスタックに戻り続けることができるという点で、.end()
やや逆です。.pushStack()
詳細については、.end()
ドキュメントを参照してください。
の使用例として.pushStack()
、コンテナ内のすべてのテキスト ノードを取得するメソッドが必要だとします。次のようにして、 を使用して新しい結果の jQuery オブジェクトを返すことができます.pushStack()
。
jQuery.fn.textNodes = function() {
var nodes = [];
this.each(function() {
var node = this.firstChild;
while (node) {
if (node.nodeType == 3) {
nodes.push(node);
}
node = node.nextSibling;
}
});
return this.pushStack(nodes, "textNodes");
};
core.jsの jQuery ソース行 203 を見ると、スタックは jQuery オブジェクト インスタンス内の現在の要素セットを参照しています。連鎖のようなものだと考えてください..フィルタリングすると、スタックに追加されます。end() を呼び出すと、そのセットがポップされ、スタック内の前のセットに戻ります。.pushStack()
このスタックに要素の新しいセットを追加できます。
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" ) {
ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
// Return the newly-formed element set
return ret;
},
.end() で使用できます
参照: jQuery pushStack
また: http://www.bennadel.com/blog/1739-Using-PushStack-In-jQuery-Plugins-To-Create-New-Collections.htm