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

时间:2010-02-04 19:01:19

标签: javascript jquery

这个问题说明了一切。哪一个更好,什么时候使用什么,我从不使用jQuery live(),因为我使用liveQuery插件已有几年了,我已经习惯了它并且仍在继续使用它。但我想知道两者之间的微妙差异以及何时使用它们?

4 个答案:

答案 0 :(得分: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()所做的那样)。

答案 1 :(得分:3)

作为Pointy saidlive()利用DOM上的事件冒泡(事件委托)。 此外,对于每个$(selector).live(type, handler)调用,jQuery仅调用handler元素上的$(event.target).closest(selector) - 即事件目标的最近匹配的祖先或自我元素。 当然,live()不支持livequery( matchedFn, unmatchedFn )之类的内容。

意义:

  • $(selector).live()仍需要遍历DOM(显然)。 但是,如果您加载jQuery并在文档头中附加live()处理程序,那么还没有要搜索的文档正文。同样,如果您在页面中插入新内容。
  • live()在配置时工作量减少 - 它不必将处理程序附加到每个匹配的元素
  • live()在处理事件方面做得更多 - 它必须遍历事件目标的祖先,找到与选择器匹配的元素
  • $("div").live()$("div").livequery()不同,因为它仅适用于与事件目标最近的div
  • 同样,$("div, p").live()$("div").live(); $("p").live();
  • 不同

答案 2 :(得分:1)

最初创建了liveQuery插件,然后将其迁移到jQuery本身。

答案 3 :(得分:0)

其中一个区别是.live()是jQuery(http://api.jquery.com/live/)的原生,而.livequery()是一个插件。正如您在http://api.jquery.com/live/所看到的那样,.live()在jQuery 1.7中已被弃用,并在1.9版本中被删除。