5

搜索并没有找到我的问题的解决方案,所以在这里提问。我已经将 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 这是可能的,但我想问一下。

4

1 回答 1

4

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

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

另一种方法是侦听此处DOMNodeInserted概述的事件,但由于性能不佳, W3C 第 3 级事件规范中已弃用此方法。它也不兼容 IE

这个问题有一些关于监视事件的很好的讨论,DOMNodeInserted以及挂钩到任何可以更改 DOM 的方法的替代方法。(它有点旧,但从我的研究来看,什么都没有改变)。

总之,继续使用 livequery。

另请注意,从 jQuery 1.7 开始,.live() ( deprecated ) 和 .delegate() ( superseded ) 应替换为 .on()(和 .die()替换为 .off( ))。不过,新方法并没有引入任何可以解决您的 livequery 依赖关系的东西。

于 2012-03-09T20:04:50.670 回答