哪个更好,刷新后绑定或live()(jQuery)?

Mar*_*ine 3 jquery bind

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

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

或这个?

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

$.post('get_something.php',function(data){
    $('#container').html(data);
});
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

首先,我不建议使用live(并且jQuery团队已弃用它).我将delegate(或新版本on)与更具针对性的容器(在您的情况下#container)一起使用,而不是整个文档.

如果你这样做,点击时的表现将非常接近于没有差别(我们在这里处理一个用户生成的事件,奇怪的额外几毫秒不会没关系).

不过,(嗯)还有其他考虑因素.假设我们有这个标记:

<div id="container">
    <div id="wrapper">
        <a>A link</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

......而这段代码:

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

由于它a是最深的元素,因此您希望a第一个处理程序处理单击并查看console.log条目.但是你不会,因为点击实际上没有被处理,直到它到达容器 - 在这种情况下,它不会到达容器,因为它们之间的包装元素会停止事件.

这不是消极的(我发现它delegate非常有用并且一直使用它),当你设计如何处理事物时,它只是需要考虑的事情.