livequery已被弃用

sam*_*old 14 javascript jquery livequery

我正在看旧代码.我看到对于添加了ajax的元素,有很多livequery代码.使用较新版本的jquery不再需要livequery吗?有谁知道在哪个版本之后不需要它?

$("#somediv").livequery(function(){
    $(this).click(function(){

    });
});
Run Code Online (Sandbox Code Playgroud)

use*_*716 13

livequery是一个完全不同的概念.live().

.live()方法使用事件委派来处理页面上任何位置发生的事件.

livequery将在DOM发生更改时调用处理程序(通过jQuery方法).

对于下面的示例,当将一个元素class="some_class"添加到DOM(或将该类添加到元素中)时,第一个处理程序将运行.删除时,第二个.

$('.some_class').livequery( function() {

       // apply a plugin to the element
    $(this).somePlugin();

}, function() {

    // clean up after the element was removed

});
Run Code Online (Sandbox Code Playgroud)

应该没有什么实际需要livequery,但在极少数情况下,您需要响应DOM更改,并且无法控制导致这些更改的jQuery,它可能很有用.

  • @Raynos:我刚刚看了一下源代码并进行了快速测试,你对`livequery`的工作方式的描述是不对的.它确实用一个函数包装jQuery方法,该函数在调用原始函数之前调用内部代码.因此,当调用方法时,它会根据提供的原始选择器执行DOM选择,并在找到新元素时应用回调.因此,所有DOM元素的每个时间段都没有任何轮询. (8认同)
  • livequery很方便1)你需要在创建元素时对元素做一些事情(比如在创建的元素上运行插件)或2)当我需要在元素上立即发生绑定时我不想依赖委托(也许其他事件句柄更高将在它到达我的处理程序之前停止委托)虽然1)可能通过在我要加载或更改dom时手动管理代码来解决 - 使用livequery执行它更简单.但是可能会有性能损失,特别是在旧浏览器上,所以要谨慎使用. (2认同)

Rei*_*.85 5

您必须使用on()并将事件附加到父级或主体。前任 :

$('#obj').livequery('click', function() { ... });
$('#obj').livequery(function() { ... });
Run Code Online (Sandbox Code Playgroud)

变得

$('body').on('click', '#obj', function() { ... });
$('body').on('DOMNodeInserted','#obj', function() { ... });
Run Code Online (Sandbox Code Playgroud)

注意 DOMNodeInserted 是 IE9+