Javascript性能-在dom上迭代并添加侦听器
Javascript performance - Iterating over dom and adding listeners
我目前正在一个大型web项目中工作,该项目中有许多dom元素,需要一个监听器来点击/更改/。。。事件。主javascript文件的前500行代码如下所示。
$( ".bla" ).each(function(e) {
$(this).on("click", function(){
...
});
});
因此,基本上我们添加了大约100个侦听器,对于每个侦听器,我们必须在完整的dom树上进行迭代。我认为这将占用相当大的计算能力。是否有类似最佳实践的解决方案来避免这种情况?
您可以使用事件委派:
$(document).on("click", ".bla", function(){
// ...
});
希望您从其他答案中了解到不需要使用each
。但是,甚至可能不需要像您的示例中那样选择.bla
类的所有元素。
相反,如果div或其他元素包含您有兴趣处理点击事件的所有元素,则可以将事件监听器放在容器上,然后通过检查事件的target
属性来确定哪个元素被点击了。这是由于"事件传播"而起作用的——如果不直接对单击的元素进行处理,则事件将向上传播到DOM。
下面只有两个按钮的简单示例。这是一个直接的Javascript,应该很容易转换为JQuery——希望它能有所帮助。
<html>
<head>
<script>
setTimeout(function() {
document.getElementById('container').addEventListener('click', function(event) {
alert('You clicked ' + event.target.innerHTML);
});
});
</script>
</head>
<body>
<div id="container">
<button id="fooButton" type="button">foo</button>
<button id="barButton" type="button">bar</button>
</div>
</body>
</html>
相关文章:
- 在对象上迭代.解构其键和属性并添加新的键和属性
- Javascript性能-在dom上迭代并添加侦听器
- 在对象上迭代并添加新属性
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- AngularJs:我想从数组或列表中添加一个类,用于ng-repeat中的每次迭代
- JQuery 添加表单元素迭代 ID
- 将自定义迭代器添加到 JavaScript 类
- 我的 JS 对象迭代在添加新属性时中断
- 为什么在 javascript 中向数组原型添加方法会破坏 for 循环上的迭代
- 迭代 JavaScript 集合并添加排序顺序
- 如何为由 ng-repeat 迭代的每个名称和值添加单独的宽度
- 在“for”循环迭代之间添加延迟
- 如何使用XTemplate在x次迭代后添加换行符
- 按添加元素的顺序对字典进行迭代
- 在每次迭代时向DOM添加一个元素,而不是在循环结束时添加全部元素
- 在Ionic中,如何在for循环的每次迭代后向应用程序视图添加数据
- 如何在每一次“暂停”的迭代过程中添加一个暂停;对于循环“;使用Javascript
- 添加的数值迭代器是NaN
- 如何在_的每次迭代中添加延迟?js中的每个循环
- JavaScript通过迭代添加数字