性能,哪個更快?爲JQuery ID選擇器提供上下文有幫助嗎?
$('#' + strControlId);
或
$('#' + strControlId, $('#' + strContextId));
性能,哪個更快?爲JQuery ID選擇器提供上下文有幫助嗎?
$('#' + strControlId);
或
$('#' + strControlId, $('#' + strContextId));
要回答你的問題,第一個問題會更快。你只會調用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)指向太。
我第一個想到的會更快(它做的更小)。雖然當我想到使用上下文參數的,我認爲做這樣的事情從iframe
或類似訪問父文檔中的字段:
var el = $('#' + strControlId, parent.document);
你可以嘗試一些基準測試,如果你真的很好奇。
我沒有訪問jQuery環境來運行測試,但我會得到機會 – Nick 2009-09-25 18:13:13
由於您使用的ID作爲您的查詢,我懷疑它是更快。
一個很好的例子就是這個。
var inputs = $('input');
$('[class=this][name=that]', inputs).css('color', 'red');
實際上,jQuery將另一個jQuery或純DOM元素作爲上下文。 – 2009-11-11 11:29:09
那麼你是說 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