2013-07-08 121 views
1

這是更快ID VS無功與查找功能

<div class="box"><div id="inside"></div></div> 

jquery 

    var div_obox = $('.box'); 
    var div_Ibox = div_obox.find("#inside") or var div_Ibox = $("#inside"); 

只是迫切地想知道這是更快我知道使用ID是最快的,但然而,即使採用可變的速度要快得多,我猜。

我當時期待它已經在第一個聲明中發現了.box元素,所以很容易讓瀏覽器找到#inside元素,使用find函數。正如我們指定的那樣,它存在於.box之內,如果我在這裏使用id,我想它需要從頭再次開始搜索過程。通過find函數讓我知道Id和var。由於

+3

爲什麼不在jsPerf.com上運行測試並找出答案? – j08691

+0

jsperf對不起,我不知道它。讓我看看它,謝謝@ j08691 – niko

回答

1

$("#inside")div_obox.find("#inside")速度更快,比$('.box > #inside')因爲jQuery,在第一種情況下,可以做和使用document.getElementById和所有瀏覽器保持ID及其相關要素之間的直接映射。

從源代碼:

// Shortcuts 
    if ((match = rquickExpr.exec(selector))) { 
     // Speed-up: Sizzle("#ID") 
     if ((m = match[1])) { 
      if (nodeType === 9) { 
       elem = context.getElementById(m); 

如果沒有邏輯上的理由從不添加任何一個'#id'選擇器(即檢查的元素在DOM中的特定部分中存在)。

1

我會運行一些測試...

但我相信,所有的元素都通過其ID在頁面上的索引,以便$('#inside')$('.box > #inside')會比$('.box').find('#inside')

1

快很多,我相信直接ID$("#inside")將永遠是最快,因爲所有內容都由唯一ID索引的DOM