搜索没有透露我问题的解决方案,所以问这里。我一直在使用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示例一样。
根据我的理解,到目前为止,如果没有实时问题,我不相信这是可能的,但我想要确认。
答案 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依赖关系的方法。