性能:jquery.live()与按需创建特定的侦听器?

我有一个包含新闻项目标题的页面,点击每一个ajax加载包括照片缩略图在内的完整新闻项目。 我想在缩略图上附上一个灯箱,以显示更大的照片。

我有两个选择(我认为):

  1. 。生活()

$('img .thumb').live('click', function()) 
  1. 在新闻项目点击的回调上添加特定的基于id的侦听器

 $('div.news_item').click(function(){ var id = $(this).attr('id'); //click show_news_item(), //callback function(){$(id+' .thumb').lightbox();} }) 

.live()你有1个监听器而不是绑定的n事件监听器,所以如果你有:

  1. 大量元素或动态创建/加载的元素
  2. 嵌入DOM不是太深,或者是你有很多元素(这里的成本/效益比)

在你的情况下,我会使用.live() ,像这样:

 $('div.news_item').live('click', function(){ }); 

或者,如果您的class="news_item"元素位于容器中,您可以选择如下:

 
News 1
News 2

您可以像这样使用.delegate() (更有效,更少的事件冒泡DOM):

 $("#newsIems").delegate(".news_item", "click", function() { }); 

注意:函数内部的代码仍然相同, $(this)仍指向具有这些选项的相同元素。