jQuery live()和liveQuery插件之间有什么区别?

6

这个问题已经说得很清楚了。什么时候应该使用哪个,哪一个更好?我从来没有使用过jQuery的live()方法,因为我用了liveQuery插件已经有几年了,我已经习惯并继续使用它。但是我想知道两者之间的微妙差异以及何时使用每个。

4个回答

5
jQuery中的“live”函数利用事件在DOM上的冒泡。相比之下,“liveQuery”插件使用选择器在DOM中查找元素并直接附加事件处理程序。
在我看来,如果可能的话,最好使用“live”函数,因为它涉及的DOM遍历较少等。例如,在大表格中挂接事件处理程序可能会使用liveQuery有点慢,但是使用“live”则完全不慢。当然,可能会有一些问题(特别是IE),强制你有时候使用liveQuery,尽管jQuery 1.4已经显著改进了“live”。
编辑 - 更新:2017年9月
此时,现代版本的jQuery将事件处理程序注册集中在.on() API中。简单地说:
$(selector).live("event-name", handler);

今天是否会使用.on()来编写:
$(document).on("event-name", selector, handler);
.on() API提供的灵活性比已被弃用的.live()方法要多得多,包括可以使用DOM中的任何节点作为委托点(就像旧的.delegate()方法一样)。

如果在调用live()时表格已经存在于文档中,则仍会进行DOM遍历。例如,$("td").live()仍会找到每个td元素。 - Sean Hogan
现在也有.delegate(),这实际上是一个更智能的API。 - Pointy
1
@JaimeMontoya,jQuery .live()方法已经被弃用了多年。不应该使用它,.liveQuery()也一样。现在是2017年了 :) - Pointy
1
在现代jQuery中,.on() API集中了所有事件处理。我会扩展答案; 是时候了 :) - Pointy
@Pointy 正如我所提到的,我的遗留系统使用jQuery 1.3.1。我需要升级到现代版本的jQuery。我的第一步是尝试摆脱Live Query插件,改为使用.on()。我想在jQuery 1.3.1中使用.on(),因为我不想让我的网站一旦从jQuery 1.3.1突然切换到例如1.7或更新的版本,就会出现各种故障。但我意识到,.on()仅从jQuery 1.7开始提供。你认为先从.livequery()转换到.live(),然后再转移到jQuery 1.7,然后从那里继续迁移,这是一个好策略吗? - Jaime Montoya
显示剩余3条评论

3

正如 Pointy所说, live() 利用 DOM 中事件的冒泡(事件委托)机制。 此外,对于每个 $(selector).live(type, handler) 调用,jQuery 只会在 $(event.target).closest(selector) 元素上调用 handler - 也就是事件目标的最近匹配祖先或自身元素。 当然,live() 不支持类似于 livequery( matchedFn, unmatchedFn ) 的任何功能。

影响:

  • $(selector).live()仍然需要遍历DOM(显然)。但是,如果您在文档头中加载jQuery并附加live()处理程序,则尚无要搜索的文档主体。同样,如果您将新内容插入页面,则也是如此。
  • 配置live()时所需的工作量较少——它不必将处理程序附加到每个匹配的元素
  • 处理事件时live()需要完成更多的工作——它必须遍历事件目标的祖先,并找到与选择器匹配的元素
  • $("div").live()$("div").livequery()不同,因为它仅适用于最接近事件目标的div
  • 同样,$("div, p").live()$("div").live(); $("p").live();也是不同的

1

liveQuery插件最初是由独立开发的,后来被迁移到了jQuery本身。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接