2011-07-23 18 views
3

我有200個div的清單,點擊()與實況()主場迎戰的onclick(很多的div)jQuery中

<div id="sId_1" class="sDiv"></div> 
<div id="sId_2" class="sDiv"></div> 
.... 
<div id="sId_200" class="sDiv"></div>. 

什麼下面兩個是比較快?

-- each loop -- with i++; 
    <div onclick="callSomeFunction('click');" id="sId_'+i+'" ></div> 
-- each loop -- 


-- each loop -- with i++; 
    $('#sId_'+i+'').click(function (event) .... 
-- each loop -- 


$('.sDiv').click(function (event) ...... 

它是第一個解決方案嗎?因爲jQuery爲每個div在$ .cache中創建一個對象。

PS:是一個超過1000個條目的對象是JavaScript的問題嗎?

+0

http://www.jsperf.com可能開始 –

回答

4

您可以使用事件委託附加一個「聰明」的事件處理程序,以一個合適的父容器:上述辦法的

$("#parent").delegate("div[id^='sId']", "click", function() { 
    // do something 
}); 

優點:

  • 只有一個事件處理程序。
  • 可以附加到一個jQuery對象,而不是一個選擇器,其中 使.delegate調用可鏈接。
  • 適用於未來的元素,例如通過JS/Ajax添加的元素。
  • 您可以停止事件的傳播/冒泡,因爲它們只會冒泡到父級而不是document元素,與.live的情況一樣。

參考:

http://api.jquery.com/delegate/

+0

不錯,從來沒有完全明白直到現在,代理活動的優勢。 – efwjames

1

第一個是最快的,但它會花費你的大小頁面。

第二個需要修復,因爲你不會這樣做到100個div。

這樣就可以使每個div的一類,你會然後調用這樣的:

$(".divPRessable").click(... 

最後只有更快,如果你要注入的div到DOM(最慢)。

+0

你讓我錯了一個好去處。 ...我更新了我的帖子。感謝您的快速回答。 – Peter

相關問題