回答
我想这是低效的,因为处理程序放置在根节点上,并依靠冒泡来捕获事件并运行正确的处理程序。
其中一种替代方法是将您的处理程序简单地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