将 livequery 转换为 live/delegate/?

Posted

技术标签:

【中文标题】将 livequery 转换为 live/delegate/?【英文标题】:converting livequery to live/delegate/? 【发布时间】:2011-12-14 14:05:18 【问题描述】:

搜索没有找到我的问题的解决方案,所以在这里提问。我已经将 livequery() 与 live() 结合使用了一段时间。通常,我将 live() 用于已知事件,例如单击,但使用 livequery 触发特定选择器并应用插件。比如……

$('#childDomains').livequery(function() 
  var element = $(this);
  element.jqGrid(
    // plugin initialization here
  );
);

我想知道是否有办法使用 live() / delegate() 或其他一些我不知道的酷 jQuery 功能来做同样的事情。我试图减轻我的依赖负载,我注意到 livequery 自 02-2010 以来没有更新。

更新:我想我还不够清楚。我有一个使用 jqGrid 并将 TABLE 元素转换为 jqGrid Ajax 数据网格的页面。没有真正的点击事件发生。该表所在的页面是通过 ajax 加载的,只要 DOM 看到 $("#childDomains") 它就应该将 jqGrid 插件应用于该元素。就像我的 livequery 示例正在做的那样。

据我目前的理解,如果没有 livequery,我不相信这是可能的,但我想问一下。

【问题讨论】:

【参考方案1】:

不,使用 jQuery 没有明显更好的方法可以做到这一点;我会说 livequery 是目前最好的方法。

也就是说,还有其他可能的方法。 Here 有人滚动了他们自己的轮询代码来检测元素何时插入 DOM。您可以对此进行调整,但据我所知,livequery 已经在为您执行此操作。

另一种方法是侦听DOMNodeInserted 事件,如here 所述,但这是deprecated in the W3C Level 3 Events Specification,由于poor performance。也是not IE compatible。

This question 对监视DOMNodeInserted 事件以及挂钩到任何可以更改 DOM 的方法的替代方法进行了一些很好的讨论。 (它有点旧,但从我的研究来看,一切都没有改变)。

总之,继续使用 livequery。

还要注意,从 jQuery 1.7 开始,.live() (deprecated) 和 .delegate() (superseded) 应该替换为 .on()(和 .die() 替换为 .off())。但是,新方法不会引入任何可以解决您的 livequery 依赖关系的方法。

【讨论】:

以上是关于将 livequery 转换为 live/delegate/?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - livequery 插件帮助

PrettyPhoto 不适用于 livequery

Jquery 和 livequery

Livequery 和 each()

JavaScript 使用livequery将jquery事件绑定到ajax'd内容

使用livequery将jquery事件绑定到ajax&ŧ039;d内容