2013-08-16 37 views
1

在({})中包含jQuery的上下文會使其更快嗎?JQuery on()優化

實施例:

$('body').on({ 
    click: function() 
    { 
     // blah 
    } 
},'.myClass'); 

VS

$('body').on({ 
    click: function() 
    { 
     // blah 
    } 
},'.myClass','#myWrapper'); 
+1

我不認爲這是如何'上'工作。如果我正確閱讀文檔,第三個參數應該是「data」,而不是「context」。 –

+0

你的上下文在這種情況下是'body'。你也可以這樣做:'{('#myWrapper')。on({/ * handlers * /},'.myClass');' –

+0

如果上下文是''myWrapper''讓你的代碼是'$(「 #myWrapper「)。on({},」.myClass「)'。您總是希望將您的處理程序綁定到動態元素的最接近的靜態祖先元素。 – nbrooks

回答

1

更快的選擇將是

$('#myWrapper').on({ 
    click: function() 
    { 
     // blah 
    } 
},'.myClass'); 

這將是比$('body').on(...)更快,因爲,在這每一次點擊頁面中的發生將會對德選擇'.myClass'但是當你進行評估使用上面的選項只有點擊發生裏面#myWrapper將被評估

+0

這將工作在動態元素? – user1083320

+0

@ user1083320只要動態元素在'#myWrapper'內 –

0

否,包括on上下文是不是更快則.click和其他活動。

由於on用於添加那些動態創建元素的事件。 然後將搜索從身體開始的所有元素。和其他事件將綁定在頁面呈現,以便更快。

.on用於動態創建元素並希望在這些元素上提供某些事件。

編輯:

.on的語法是不是在你的正確。它應該是這樣的:

$('body').on("click", "#.myClass, #myWrapper", function(e) { 
    //your code 
}); 
+0

謝謝。是的,我正在動態創建元素,這就是我使用它的原因。 – user1083320

+0

@ user1083320 ok,然後你可以使用這個方法。爲了讓它更快。給類或id名稱代替'body'。 –