在 jQuery API 中,我看到了一个函数pushStack
。描述是:Add a collection of DOM elements onto the jQuery stack.
有谁知道 jQuery 堆栈是什么以及它可以用来做什么?它与DOM有关系吗?
在 jQuery API 中,我看到了一个函数pushStack
。描述是:Add a collection of DOM elements onto the jQuery stack.
有谁知道 jQuery 堆栈是什么以及它可以用来做什么?它与DOM有关系吗?
当您将多个 jQuery 方法链接在一起并且每个方法返回一个新的 jQuery 对象时,jQuery 会跟踪堆栈中的所有 jQuery 对象。这允许您返回到以前使用的 jQuery 对象,而不必将其保存在局部变量中。为了使这个工作,当 jQuery 方法作为方法调用的结果创建一个新的 jQuery 对象时,它调用pushStack()
以允许新对象参与堆栈。
jQuery 方法.end()
有点相反.pushStack()
,它返回堆栈中的一项以获取先前的 jQuery 对象,并且可以多次调用它以继续返回堆栈。有关更多信息,.end()
请参阅文档。
对于 using 的示例,.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