什么是jquery堆栈?

时间:2012-08-10 06:49:10

标签: jquery dom

  

可能重复:
  How does the jQuery pushStack function work?

在jQuery API中,我看到了一个函数pushStack。描述sais:Add a collection of DOM elements onto the jQuery stack.

有谁知道jQuery堆栈是什么以及它可以使用什么?它与DOM有关系吗?

4 个答案:

答案 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)