2009-09-25 44 views

回答

2

要回答你的問題,第一個問題會更快。你只會調用getElementById一次。

有一點需要注意的是context參數需要一個HTML節點而不是一個jQuery對象。在你的情況下,第二項仍然在文檔,而不是內部

$('#' + strContextId) 

搜索確保[0]爲了通過HTML節點添加到jQuery對象的末尾。

要測試這一點,可以使用context屬性來檢查選擇器從哪個上下文中進行選擇。對於上面的示例,您可以執行此操作

console.log($('#' + strControlId).context); 
console.log($('#' + strControlId, $('#' + strContextId)).context); 

而且您會發現它們都返回「Document」上下文。如果你跑

console.log($('#' + strControlId, $('#' + strContextId)[0]).context); 

它應該返回任何元素$('#'+ strContextId)指向太。

+0

實際上,jQuery將另一個jQuery或純DOM元素作爲上下文。 – 2009-11-11 11:29:09

+0

那麼你是說 console.log($('#'+ strControlId).context); ($('#'+ strControlId,$('#'+ strContextId))。context); 會返回相同的東西嗎?打開firebug並在此頁面上運行這些命令 console.log($('#header')。context); console.log($('#header',$('。container'))。context); 你會發現它們都返回Document作爲上下文。這是否表明jQuery對象不被允許? – 2009-11-11 16:00:24

0

我第一個想到的會更快(它做的更小)。雖然當我想到使用上下文參數的,我認爲做這樣的事情從iframe或類似訪問父文檔中的字段:

var el = $('#' + strControlId, parent.document); 

你可以嘗試一些基準測試,如果你真的很好奇。

+0

我沒有訪問jQuery環境來運行測試,但我會得到機會 – Nick 2009-09-25 18:13:13

0

由於您使用的ID作爲您的查詢,我懷疑它是更快。

一個很好的例子就是這個。

var inputs = $('input'); 
$('[class=this][name=that]', inputs).css('color', 'red');