2013-01-24 30 views
10

如果我只想將jQuery數組中的第一項作爲DOM元素來使用jQuery,那麼使用$(selector).get(0)優於$(selector)[0]會有什麼好處?爲什麼使用jQuery(選擇器).get(0)而不是jQuery(selector)[0]來獲取DOM元素?

HTML:

<form id="myForm"></form> 

的Javascript:

var selector = '#myForm'; 
var domElement = $(selector).get(0); //Returns [object HTMLFormElement] 

//Or 
var domElement = $(selector)[0]; //Also returns [object HTMLFormElement] 
  • .get()是更多的字符輸入。
  • 這兩種方法都返回相同的結果,如果$(selector)是空的,你可以簡單地使用索引訪問來獲得的第n個元素(undefined
  • The jQuery documentation on .get()註釋,但你沒有得到的.get()其他好處,比如使用一個負數來返回數組末尾的項目。
  • 此外,您可以調用.get()不帶任何參數來返回jQuery數組的所有DOM元素。
+6

非常小的優勢,我覺得你的回答你的問題 –

回答

21

.get允許您使用負指數。例如:

<span>1</span> 
<span>2</span> 
<span>3</span> 

$("span").get(-1);指第三span

但是,如果你不需要該功能,只想選擇一個元素.get(0)[0]是相同的。注意this[num]

// jQuery code 
get: function (num) { 
    return num == null ? 

    // Return a 'clean' array 
    this.toArray() : 

    // Return just the object 
    (num < 0 ? this[this.length + num] : this[num]); 
}, 
+0

我沒看過的問題..他已經指出了這個優勢。 –

+1

Matt - 你的答案仍然很有價值,因爲你指出了jQuery源代碼。我應該想到只是看着它! –

5

在速度的利益,我創建了遍歷每個10,000,000次的jsfiddle。我在文檔的開頭用一個表單創建了兩個測試,最後用1200行的虛擬HTML進行了測試。這裏有一些初步結果:

Test1 
form at beginning with .get(0): 15981ms - faster 
form at beginning with [0]:  16089ms 
form at end with .get(0):  16554ms 
form at end with [0]:   15969ms - faster 

Test2 
form at beginning with .get(0): 14137ms 
form at beginning with [0]:  14034ms - faster 
form at end with .get(0):  13756ms - faster 
form at end with [0]:   14492ms 

Test3 
form at beginning with .get(0): 15952ms - faster 
form at beginning with [0]:  16810ms 
form at end with .get(0):  15905ms 
form at end with [0]:   15532ms - faster 

它看起來沒有顯着的速度差異可以看出。但是,您必須檢查不同的瀏覽器才能確定。

你可以看看這裏的小提琴:http://jsfiddle.net/AFfYx/(需要大約一分鐘運行)

相關問題