jQuery pushStack功能如何工作?

前端之家收集整理的这篇文章主要介绍了jQuery pushStack功能如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法理解jQuery pushStack函数(记录在 http://api.jquery.com/pushStack/).我试图在这个小提琴中添加一个选项列表.

http://jsfiddle.net/johnhoffman/hTh8D/

JS:

$(function() {
   var listStuff = $("p");
   listStuff.pushStack($("div"));
   listStuff.css("color","#f00");        
});​

HTML:

<p>foo</p>
<div>bar</div>​

但是,div元素的文本不是红色的.将元素推送到jQuery堆栈是什么意思?

解决方法

.pushStack()创建一个新的jQuery对象,该对象从先前的jQuery对象继承状态.

这种继承的状态允许.end()和.self()之类的方法正常工作.在您的特定代码示例中,您不使用来自.pushStack()的返回值,它是新的jQuery对象.

当使用jQuery对象时,重要的是要知道大多数改变DOM对象在jQuery对象中的操作会返回一个新的jQuery对象,而不是修改现有的jQuery对象.正是这种设计特性使得它们能够维护这个以前修改过的jQuery对象的堆栈.

在你的情况下,我根本不认为你需要使用.pushStack(),你可以使用.add()(也返回一个新的jQuery对象),但是我并不完全清楚,尝试这样做,我不知道要推荐什么代码.

为了达到您在问题中显示的最终结果HTML,您可以这样做:

$(function() {
   $("p").add("div").css("color","#f00").appendTo(document.body);        
});​

你可以明显地将.appendTo()更改为任何你想要使用新的DOM对象.

在您的评论中,您更多地询问何时使用pushStack().我认为主要的用途是在jQuery方法中返回一个新的jQuery对象.在这种情况下,您将在新的jQuery对象中创建新的元素列表,而不是将其转换为常规的jQuery对象并返回它,您调用return this.pushStack(elems).这最终创建一个新的jQuery对象并返回它,但它也将该新对象链接到上一个对象,以便特殊的命令如.end()在链接中使用时可以工作.

jQuery .add()方法是一个典型的例子.在伪代码中,它的作用是这样的:

add: function(selector,context) {
    // get the DOM elements that correspond to the new selector (the ones to be added)
    // get the DOM elements from the current jQuery object with this.get()
    // merge the two arrays of elements together into one array
    return this.pushStack(combinedElems);
}
原文链接:https://www.f2er.com/jquery/179235.html

猜你在找的jQuery相关文章