回答
我想這是低效的,因爲處理程序放置在根節點上,並依靠冒泡來捕獲事件並運行正確的處理程序。
其中一種替代方法是將您的處理程序簡單地bind
添加到您的動態創建的元素中,並將其添加到DOM中。
另一種替代方法是將一個處理程序綁定到一個容器,並讓您的事件發生。這可以很好,如果你有很多相同的元素添加到一個容器。
<div id="myContainer">
<div class="myElement>element</div>
<div class="myElement>element</div>
<div class="myElement>element</div>
<div class="myElement>element</div>
</div>
綁定一個單擊處理程序#myContainer
,而不是每個.myElement
。
$('#myContainer').click(function(e) {
$target = $(e.target);
if($target.closest('.myElement').length) {
// Run my code for the click
}
});
我像這可能會從一些相同的低效率的受苦.live()
,但應該再好些,因爲它是更本地化。新增.myElement
項目,自動工作。
編輯:
根據the docs:對於jQuery 1.4,事件冒泡可任選地停止在DOM元素 「上下文」。
這似乎與我提到的最後一種方法產生了類似的效果。
編輯:
如所建議的由尼克Craver,jQuery的.delegate()
方法可以產生類似的效果更乾淨。尼克的
實施例提供:
$('#myContainer').delegate('.myElement', 'click' function() { alert($(this).text()); });
我在這裏提到'.delegate()',這是一個更乾淨的方式來做你的第二個例子:) – 2010-05-11 22:53:24
@Nick Craver - 不會'.delegate()'綁定一個處理程序到每個元素?我提到的方法的一個好處是,您沒有處理多個元素的開銷。 – user113716 2010-05-11 22:59:34
+1如果你舉一個例子:)你當前的標記會使用這個:'$('#myContainer')。delegate('。myElement','click'function(){alert($(this).text() );} 012;' – 2010-05-11 23:00:46
live()
可能僅被認爲是低效的,如果:
- 有被綁定到一個事件(< 5個元素的少量,讓我們說)。
- 這些目標元素的數量保持不變。
如果您的用例滿足上述標準(特別是#2),您應該堅持直接綁定元素並避免live()
。
標杆live()
的性能,你可以嘗試的一個例子是通過剖析使用live()
到click
處理程序綁定到一個元素,還配置文件使用click()
綁定到同一元素的另一個代碼片段的代碼片段。
我不太確定你會得到什麼樣的結果,但我相信它會很有趣。
正如@帕特里克認爲它可能效率低下,因爲它需要處理文檔上的所有事件,無論氣泡是否到達您的元素。
這是delegate可以幫助,因爲它的工作原理相同的方式活,但允許其只將其限制在一個共同的父
影響文檔的比例較小(用他的例子)
$('#myContainer').delegate('div.myElement', 'click', function(){});
- 1. jQuery效率低下?
- 2. Firefox Jquery appendTo效率低下?
- 3. 這是否像效率低下?
- 4. 我不明白這種「效率低下的jQuery使用情況」
- 5. FileStream.ReadByte - 效率低下 - 這是什麼意思?
- 6. 這段Javascript效率低下嗎?
- 7. 這是mysql語句效率低下嗎?
- 8. 這是XSLT效率低下嗎?
- 9. 這不會使varchar2效率低下?
- 10. 爲什麼2D哈希映射是內存效率低下?
- 11. jQuery UI選擇 - 幫助效率低下
- 12. 爲什麼我的重構SQL比原始版本效率低?
- 13. 效率低下UICollectionView ...如何優化?
- 14. Jquery。爲什麼這有效?
- 15. 我的程序似乎效率低下
- 16. 什麼時候QLC效率低得多?
- 17. 多進程效率低下
- 18. Javascript代碼效率低下
- 19. Postgres查詢效率低下
- 20. CompareToBuilder的這種用法是否被認爲效率低下?
- 21. 什麼是更快,我該如何衡量這些東西?
- 22. 這是低效率的,我該如何循環呢?
- 23. 什麼時候Alpha-Beta修剪效率低下
- 24. 什麼是jquery noConflict,爲什麼我們需要這個?
- 25. 我們應該嘗試什麼:低或高學習率?
- 26. 您使用什麼工具衡量衡量指標的績效?
- 27. 爲什麼mod_php比fastcgi效率低(php-fpm)
- 28. 爲什麼MySQL選擇看起來效率較低的索引?
- 29. 爲什麼「返回數組的屬性容易導致代碼效率低下」?
- 30. 爲什麼當有很多重複元素時快速排序效率低下?
哪位程序員?關於什麼「活」的東西?什麼方法複製? – 2010-05-11 22:46:44