2011-06-19 78 views
2

我只是在用jQuery,而我偶然發現了Find函數。

我測試這樣的:

$(document).ready(function(){ 

    $('button').click(function(){ 

     $('div').find('div').fadeOut(2000); 

    }); 
}); 

$(document).ready(function(){ 

    $('button').click(function(){ 

     $('div div').fadeOut(2000); 

    }); 
}); 

而且都產生完全相同的結果。

有什麼區別? :)

+0

根據功能規格,根本不應該有任何差異。可能有一些性能差異,應該可以忽略不計。 – Jon

+0

@Jon好吧,後者更容易輸出:) – Jeff

回答

3

在你的例子中沒有區別,但有些情況下,你不能使用第一個,例如let't說你有一個元素作爲一個函數的參數,你想在它內部找到div ,那麼你必須使用「查找」方法。

function foo(index, el) 
{ 
    $(el).find("div")... 
} 

但是當你知道確切的路徑時,顯然第二種方法更魯莽。

+0

啊 - 好吧,做'$(el +'div')...'也可以:) – Jeff

+0

@Jeff:只有'el'是一個選擇器。 – SLaks

+0

也$(「div」,el):-) –

2

沒有區別。

如果您已有jQuery對象,則find方法很有用。
否則,單個選擇器更簡單。

因爲這個原因,大多數選擇器都有相應的方法(.children(),.first(),.not())。您可以撥打.end()返回到上一個對象。

+0

不錯,我不知道.end(),但不是太多鏈接?使用這將使代碼可怕的不可讀:) –

0

在這個特定的情況下,他們做同樣的事情。請注意0​​將遍歷全部匹配元素的後代。

+0

所以'$('div div')' –

+0

是的,在這個特定的情況下。我注意到'find()' –

+0

的一般功能被編輯以使其更清楚。 –

1

它們兩者的功能完全相同,但在舊版瀏覽器中document.querySelectorAll()不可用(Old IEs)$("div").find("div");更快,正如Paul Irish在this comment here中所確認的那樣。

另一個要注意的是,在jQuery的你也可以這樣做:

$("div", "#some-element") 

這將搜索div#some-element內。 jQuery實際上將其轉換爲:

$("#some-element").find("div") 

所以總是建議使用.find()而不是在上下文中傳遞。

+1

+1這是真的。另一方面,使用'div div'的* qSA瀏覽器會快得多。 – lonesomeday