javascript – 事件委托成为有价值需要多少元素?

前端之家收集整理的这篇文章主要介绍了javascript – 事件委托成为有价值需要多少元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
阅读另一个关于jQuery性能的SO问题,我开始考虑到使用事件委托而不是单独绑定到元素时的重点.我主要是关于jQuery,但我想这可能适用于 Javascript一般.

事件委托有两个主要目的:

>允许处理程序处理尚未创建/插入DOM的元素.
>将一个函数绑定到一个共同的祖先元素而不是多个兄弟元素

我的问题是其中第二个.一般答案可能是“这取决于具体的情况”,但是我想知道是否有经验法则或基准测试方式来测试这一点.

所以,问题是:在事件委托的性能优势超过性能成本之前,您需要多少元素?

解决方法

假设这个HTML结构:
<ul id="navUL">
    <li><a href="one.html">One</a></li>
    <li><a href="two.html">Two</a></li>
    <li><a href="three.html">Three</a></li>
</ul>

只是为了清除事情(对我来说)….根据jQuery docs(http://api.jquery.com/delegate/),这个:

$("#navUL").delegate("a","click",function(){
    // anchor clicked
});

…相当于:

$("#navUL").each(function(){
    $("a",this).live("click",function(){
        // anchor clicked
    });
});

然而,事件委托(据我所知)是这样的:

$("#navUL").click(function(e) {
    if (e.target.nodeName !== "A") { return false; }
    // anchor clicked
    // anchor is referenced by e.target
});

所以你捕获UL元素上的点击事件,然后通过event.target属性找出实际点击哪个锚点.

我不知道delegate()方法,但是最后一个方法应该总是比将事件处理函数附加到#navUL元素中的每个锚点上更快,就像这样:

$("#navUL a").click(function() {
    // anchor clicked
    // anchor is referenced by the this value
});

猜你在找的JavaScript相关文章