将LiveQuery转换为Live/Delegate/?

5

搜索并没有解决我的问题,所以我在这里询问。我已经使用livequery()和live()相结合一段时间了。通常,我使用live()来处理已知事件,比如click事件,但是使用livequery()来针对特定的选择器触发并应用插件。例如...

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

我想知道是否有使用live() / delegate()或其他我不知道的很酷的jQuery功能来完成同样的事情。我试图减轻依赖负担,并注意到自2010年以来,livequery没有更新。
更新:我想我的表述不够清楚。我有一个页面使用jqGrid,将TABLE元素转换为jqGrid Ajax数据网格。这没有真正的点击事件发生。加载包含此表的页面是通过ajax完成的,每当DOM看到$("#childDomains")时,它应该将jqGrid插件应用于该元素。就像我的livequery示例所做的那样。
据我目前的了解,我认为这是没有可能的,除非使用livequery,但我想确认一下。
1个回答

4
不,目前使用jQuery没有明显更好的方法来做到这一点;我认为livequery是目前最好的方法。
话虽如此,还有其他可能的方式可以实现。在这里,有人编写了自己的轮询代码来检测元素何时插入到DOM中。你可以适应这个方法,但据我所见,livequery已经为您完成了这个工作。
另一种方法是监听DOMNodeInserted事件,如此处所述,但这在W3C Level 3 Events规范中已被弃用,因为性能较差。它也不兼容IE这个问题讨论了监控DOMNodeInserted事件的一些好方法和钩入可以改变DOM的任何方法的替代方法。 (它有点旧,但根据我的研究,还没有什么改变)。
总之,继续使用livequery。
另请注意,从jQuery 1.7开始,.live() (已弃用)和.delegate() (被取代)应该替换为.on()(而.die()应该使用.off())。新方法并没有引入可以解决您的livequery依赖关系的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接