我用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)
首先,我不建议使用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非常有用并且一直使用它),当你设计如何处理事物时,它只是需要考虑的事情.
| 归档时间: |
|
| 查看次数: |
2810 次 |
| 最近记录: |