2016-09-28 107 views
0

一旦你有一個jQuery對象一樣,你做得到:爲什麼從另一個jQuery對象創建一個jQuery對象?

var car = $('li .car'); 

我看到代碼執行以下操作:

var carChildren = $(car).children('span'); 

是什麼的地步了嗎? 爲什麼不在剛纔的jQuery var車上使用.children方法就像這樣?

var carChildren = car.children('span'); 
+6

這一點是*錯誤的用法*。不要這樣做。 – eisbehr

+1

重新創建現有對象的jquery對象是沒有意義的。使用第二種方法。 –

+1

當你正在製作一個接受字符串選擇器,jquery對象,dom節點等的多態函數時,他/她可能需要它'function doSmthToCar(car){$(car).children(...)}',即使你正在傳遞jquery對象'var car = $(); doSmthToCar(汽車)'。否則,這只是一個錯誤的用法。 –

回答

1

簡而言之:
沒有理由這樣做。但結果也沒有什麼不同。這基本上只是不好的做法。所以不要這樣做。


TL; DR
正如前面所說的,這是沒有意義,它使沒有什麼區別。讓我們思考一下這些線路的作用。需要明確的是,我們把它寫在一行:

var car = $('li .car'); 
var carChildren = $(car).children('span'); 

是一樣的:

var carChildren = $($('li .car')).children('span'); 

沒有人會做這種方式!有人會寫$(car)的原因是,他們很容易被$(this)之類的東西所迷惑,後來經常寫很多次。

爲什麼它工作呢?

如果你寫$(car) jQuery會注意到car已經是一個jQuery對象,並將其替換爲它的上下文。但是這是一項不必要的任務,可以保存。

這就是說,你也可以直接使用car作爲上下文。

var carChildren = $('span', car); 
+1

靈活性可能被視爲一種獎勵,但它確實可以讓你做一些瘋狂愚蠢的事情。 – Nelson