在jQuery API中,我看到了一个函数pushStack
。描述sais:Add a collection of DOM elements onto the jQuery stack.
有谁知道jQuery堆栈是什么以及它可以使用什么?它与DOM有关系吗?
答案 0 :(得分:3)
当您将多个jQuery方法链接在一起并且每个方法返回一个新的jQuery对象时,jQuery会跟踪堆栈中的所有jQuery对象。这允许您返回以前使用的jQuery对象,而无需将其保存在局部变量中。为了使这个工作,当一个jQuery方法由于方法调用而创建一个新的jQuery对象时,它调用pushStack()
以允许新对象参与堆栈。
jQuery方法.end()
有点与.pushStack()
相反,因为它在堆栈中返回一个项目以获取先前的jQuery对象,并且可以多次调用它以继续返回堆。有关详细信息,请参阅the .end()
doc。
对于使用.pushStack()
的示例,假设您想要一个方法来获取容器中的所有文本节点,您可以这样做并使用.pushStack()
返回新生成的jQuery对象:
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");
};
答案 1 :(得分:0)
大多数jQuery的DOM遍历方法都在jQuery对象实例上运行,并生成一个新的,与不同的DOM元素集匹配。当发生这种情况时,就好像将新的元素集推送到在对象内维护的堆栈上。每个连续的过滤方法将新元素集推送到堆栈上。您可以使用不同的功能直接在此堆栈上操作,例如:
答案 2 :(得分:0)
查看jQuery源line 203 of core.js,堆栈引用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;
},
答案 3 :(得分:0)