我用AJAX更新了一个容器。在性能方面哪个更好?伪代码:

$.post('get_something.php',function(data){
    $('#container').html(data).find('a').bind('click',function(){
        console.log('Doh!');
    });
});


或这个?

$('#container a').live('click',function(){
    console.log('Doh!');
});

$.post('get_something.php',function(data){
    $('#container').html(data);
});

最佳答案

首先,我完全不建议使用live(并且jQuery团队已弃用它)。与整个文档相比,我将delegate(或on的新版本)与目标容器(在您的情况下为#container)一起使用。

如果这样做的话,点击时的效果将非常接近,并且没有任何区别(我们在这里处理的是用户生成的事件,几毫秒的奇怪时间就可以了)。

但是,还有其他一些要考虑的因素。假设我们有这个标记:

<div id="container">
    <div id="wrapper">
        <a>A link</a>
    </div>
</div>


...以及此代码:

$("#container").delegate('a', 'click', function() {
    // Do something with the click
    console.log("Link was clicked");
});
$("#wrapper").click(function() {
    return false;
});


由于a是最深的元素,因此您希望第一个处理程序对a进行单击,并看到console.log条目。但是您不会这样做,因为单击直到到达容器才真正被处理-在这种情况下,单击不会到达容器,因为它们之间的包装器元素会停止事件。

这不是负面的(我发现delegate非常有用并且一直在使用),这只是在设计处理方式时要考虑的事情。

关于bind - 刷新或live()(jQuery)之后绑定(bind)哪个更好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9176459/

10-08 21:56