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
});

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...