为了更好地理解 jQuery 性能,我遇到了以下问题。考虑将单击事件绑定到列表中的项目的两个大致相等的解决方案:
列出项目:
<div id="items">
<div class="item"><a href="#">One</a></div>
<div class="item"><a href="#">Two</a></div>
<div class="item"><a href="#">Three</a></div>
</div>
<div id="items2">
<div class="item"><a href="#">One</a></div>
<div class="item"><a href="#">Two</a></div>
<div class="item"><a href="#">Three</a></div>
</div>
请注意,有两个身份列表(除了 ID)。现在,考虑以下 jQuery 为item
s 中的每个锚绑定客户端事件:
$('#items').on('click', '.item a', function(e) {
console.log("### Items click");
});
$('#items2 .item a').on('click', function(e) {
console.log("### Items2 click");
});
这实现了相同的结果,即单击列表中的项目将输出它们各自的消息。
观察正在绑定的事件,在第一种情况下,单击事件被绑定到#items
容器,没有事件被绑定到子项。但是,在第二种情况下,没有将click 事件绑定到 parent #items2
,但每个子元素都有一个 click 事件。
现在,我的问题是:一个明显优于另一个?天真,我认为第一种情况更可取,但由于缺乏对 jQuery 内部的了解,很可能这两种情况在幕后是等价的。
我准备了一个小提琴来演示这两种情况。观察 jQuery 为元素构建的事件是我得出上述假设的地方(您可以在 Web 浏览器的控制台中看到输出)。