问题 livequery表现


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

如果有人使用livequery和.live()获得有关最佳实践的更多信息或建议,我将非常感激


4566
2018-01-27 15:05


起源

正如下面的“patrick dw”的答案中所指出的,.live()和.delegate()几乎是由同一个livequery的作者集成到核心 - 请参阅他的博客: brandonaaron.net/blog 至少据我所知:) - Mark Schultheiss


答案:


你真的需要一个像这样的插件是很少见的 livequery。可能你真正需要它的唯一时间是你需要对你做的其他一些jQuery代码所做的DOM的更改做出反应 无法修改

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

两者的更好的选择(IMO)是 delegate()(文档) 使用事件委托的方法就像 .live(),但允许您将其约束到页面的特定部分。

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

请注意,事件委派方法响应浏览器事件,而不是对DOM的更改。如果您需要根据对已经创建的DOM的更改来运行某些代码,则需要运行该代码 当你做出改变时 到DOM。


11
2018-01-27 15:11



+1,对我来说很有意义: brandonaaron.net/blog 关于授权的更多信息。 - Mark Schultheiss
这是一个很好的答案,但请记住,这种方法只适用于冒泡的事件。某些事件,例如“无效”(在表单元素验证失败时触发)不会冒泡,因此无法通过委派捕获。 - Nicholas Byfleet