搜索尚未揭示我的问题的解决方案,因此请在此处提出。我已经将livequery()与live()结合使用了一段时间。通常,我将live()用于单击之类的已知事件,但使用livequery在特定选择器上触发并应用插件。例如...

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

我想知道是否有一种方法可以使用live()/委托(delegate)()或我不知道的其他一些很酷的jQuery功能来做同样的事情。我试图减轻依赖性负担,但发现livequery自2010年2月2日以来没有更新。

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

从到目前为止的理解来看,我不相信没有livequery是不可能的,但是我想问一下以确保这一点。

最佳答案

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

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

另一种方法是监听here概述的DOMNodeInserted事件,但是由于deprecated in the W3C Level 3 Events Specification,因此是poor performance。它也是not IE compatible

This question在监视DOMNodeInserted事件方面有一些不错的讨论,并且可以选择 Hook 任何可以更改DOM的方法。 (它有些旧,但是从我的研究来看,还没有改变)。

总之,继续使用livequery。

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

关于jquery - 将livequery转换为live/delegate/?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7883747/

10-09 17:27