2015-06-30 316 views
4

我不明白$("")$.find("")之間的區別。當沒有任何東西匹配時,它們的表現會有所不同,但您試圖對結果進行處理(如致電toggle())。

$("").toggle(); // No error 

$.find("").toggle(); // An error 

$("body").find("").toggle(); // No error! 

$($.find("")).toggle(); // No error 

爲什麼? :-)

在我的上下文中,我有一個函數,它使用$來搜索全局元素,沒有任何匹配時沒有問題。現在我想允許該函數僅在指定元素內部進行搜索(包裝在jQuery對象中)。但如果我自己通過$它仍然應該工作。

回答

6

$.find("")返回一個空數組,因此當您使用[].toggle()時因爲數組沒有切換方法而引發錯誤。

並將其包裝在jQuery中,即像$ $($.find(""))這樣的$返回空對象Object[]並且在jQuery對象中使用toggle()不會引發錯誤。

$ .find是內部CSS選擇器引擎(Sizzle),該函數返回just和所發現元素的數組。它不是jQuery實例,因此沒有像切換那樣的jQuery原型方法。 (感謝@dfsq)

在有jQuery的無速記方法 $.find find

+2

這是正確的答案。爲了增加它,'$ .find'是一個內部的CSS選擇器引擎(Sizzle),並且該函數返回just和所找到元素的數組。它不是jQuery實例,因此沒有像'toggle'這樣的jQuery原型方法。 – dfsq

0

見官方jQuery的文檔,其中規定:

如果提供的jQuery代表了一組DOM元素,該.find()方法允許我們通過這些元素的後裔搜索(...)

換句話說,.find()只有當你想在已選擇的元素內找到時才能正常工作。

1

這是官方的jQuery的文檔有什麼看法.find方法:

獲取後裔匹配 元素的當前集合中的每個元素,由選擇器,jQuery對象或元素過濾。 。

$ .find( 「」)和$( 「」)之間的差別找到( 「」)是: $ .find開始遍歷從DOM樹的最頂端的DOM,而$( 「」).find從指定的DOM元素開始遍歷DOM並嘗試查找它的子元素。

1

其實,toggle是一個jQuery函數只能一個jQuery對象內,但$.find()不返回一個jQuery對象,而不是返回香草JavaScript對象。因此錯誤。

鑑於任何jQuery選擇器將返回一個jQuery對象,因此,如果您將此$.find轉換爲jQuery對象,那麼它的工作原理。

你可以嘗試下面的代碼來檢查一個對象是否是jQuery對象。

$("#mainbar") instanceof jQuery 
//Output: true 

$.find("#mainbar") instanceof jQuery 
//Output: false 

$($.find("#mainbar")) instanceof jQuery 
//Output: true 
相關問題