这个问题说明了一切。哪一个更好,什么时候使用什么,我从不使用jQuery live(),因为我使用liveQuery插件已有几年了,我已经习惯了它并且仍在继续使用它。但我想知道两者之间的微妙差异以及何时使用它们?
答案 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 said,live()
利用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版本中被删除。