这个问题已经说得很清楚了。什么时候应该使用哪个,哪一个更好?我从来没有使用过jQuery的live()方法,因为我用了liveQuery插件已经有几年了,我已经习惯并继续使用它。但是我想知道两者之间的微妙差异以及何时使用每个。
这个问题已经说得很清楚了。什么时候应该使用哪个,哪一个更好?我从来没有使用过jQuery的live()方法,因为我用了liveQuery插件已经有几年了,我已经习惯并继续使用它。但是我想知道两者之间的微妙差异以及何时使用每个。
$(selector).live("event-name", handler);
.on()
来编写:$(document).on("event-name", selector, handler);
.on()
API提供的灵活性比已被弃用的.live()
方法要多得多,包括可以使用DOM中的任何节点作为委托点(就像旧的.delegate()
方法一样)。正如 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();
也是不同的liveQuery插件最初是由独立开发的,后来被迁移到了jQuery本身。
其中一个区别是.live()是jQuery的本地函数(http://api.jquery.com/live/),而.livequery()是一个插件。正如您在http://api.jquery.com/live/中所看到的,.live()在jQuery 1.7中已被弃用,并在版本1.9中被删除。
.delegate()
,这实际上是一个更智能的API。 - Pointy.live()
方法已经被弃用了多年。不应该使用它,.liveQuery()
也一样。现在是2017年了 :) - Pointy.on()
API集中了所有事件处理。我会扩展答案; 是时候了 :) - Pointy