我用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/