将livequery转换为live / delegate /?

时间:2011-10-25 01:29:11

标签: jquery livequery

搜索没有透露我问题的解决方案,所以问这里。我一直在使用livequery()一段时间与live()结合使用。通常,我将live()用于已知事件(如click),但使用livequery触发特定选择器并应用插件。例如......

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

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

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

根据我的理解,到目前为止,如果没有实时问题,我不相信这是可能的,但我想要确认。

1 个答案:

答案 0 :(得分:4)

不,没有明显更好的方法来使用jQuery;我会说livequery是目前最好的方法。

说这是其他可能的方法。 Here某人已经推出了自己的轮询代码来检测元素何时插入DOM。你可以调整它,但据我所知,livequery已经为你做了这个。

另一种方法是按照here概述来监听DOMNodeInserted个事件,但由于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()替换为{ {3}})。新方法不会引入任何可以解决您的livequery依赖关系的方法。