.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);
}
雖然含糊不清,但它是簡潔的(就像是例子)。將** DOM **元素推入堆棧,而不是jQuery包裝的元素。 – 2012-04-17 19:29:18
謝謝,有什麼區別? – 2012-04-17 19:30:07
[jQuery pushStack]的可能重複(http://stackoverflow.com/questions/4399055/jquery-pushstack) – Mottie 2013-02-21 23:29:41