11

我最近发现jQuery 的 livequery 插件可能非常浪费,因为它不使用事件委托,而是绑定所有可绑定事件并在每次更改时重新检查整个 DOM

如果有人对使用 livequery 和 .live() 的最佳实践有更多信息或建议,我将不胜感激

4

1 回答 1

11

您实际上很少需要像livequery. 可能您真正需要它的唯一时间是您需要对由其他一些您无法修改的 jQuery 代码对 DOM 所做的更改做出反应。

虽然.live()确实使用事件委托,但它是在document级别上进行的,这意味着它需要处理页面上的所有事件,以查看它们是否与每个事件类型提供的选择器匹配。

一个更好的替代方案 (IMO) 是delegate()(docs)方法,它使用事件委托就像 一样.live(),但允许您将其限制在页面的特定部分。

$('#someContainer').delegate('a.someButton', 'click', function() {
    // do something when an "a.someButton" inside "#someContainer" is clicked
});

请注意,事件委托方法响应浏览器事件,而不是对 DOM 的更改。如果您需要根据对 DOM 所做的更改运行某些代码,则需要在对 DOM进行更改时运行该代码。

于 2011-01-27T15:11:49.913 回答