6

什么应该是 jQuery.live() 的正确替代品。我知道 jQuery.on() 做同样的事情,但在 jQuery.on() 的情况下,我们必须指定父级才能使其工作。

假设我的页面上有 500 个 live ,现在我想将所有 500 live 更改为 on 并通过选择每个元素的父级来做到这一点是不可行的,并且需要更多时间。

假设我有$(".item").live("click",function(){ alert("test"); });

如果我用 jQuery.on() 替换它,那么它应该是$("body").on("click",".item",function(){ alert("test"); });

但我想知道是否有一些捷径或其他方法可以实现这样的目标

$(".item").on("click",function(){ alert("test"); });

这样我就可以在几秒钟内全部更换。

4

3 回答 3

5

.live()死了,万岁.live()https ://github.com/jquery/jquery/commit/eed78cc321ed7e2b37fb34e32fbb528b24f61d6e

虽然很认真,但对于您寻求的单线,您可以将其添加回来:

jQuery.fn.live = function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }

将其添加到您的 JS 的顶部以有效地创建一个 shim,让您可以随意使用.live(),而不必关心您使用的是哪个版本的 jQuery。

但实际上,就像其他人所说的那样,您应该使用您选择的文本编辑器或 sed 之类的命令行实用程序来执行 find-replaceall。在我给你的 shim 解决方案中,你正在调用一个函数来调用另一个函数,这会带来很多开销,并且可能会使用不必要的资源。.on()效率更高,特别是如果您直接调用它。


更新:上述解决方案依赖于 jQuery 的内部.context属性,该属性自 jQuery 1.10 以来已被弃用,并且可能在任何后续版本中消失。大多数情况下应该满足您需求的替代版本是简单地替换this.contextdocument. 这在.context 属性的 API中列出了限制:

此属性的值通常等于 document,因为如果没有提供,这是 jQuery 对象的默认上下文。例如,如果对象是通过在<iframe>XML 文档中搜索创建的,则上下文可能会有所不同。

所以它可能会失败。无论如何,现在你绝对没有理由不.on()直接使用。随时查看我关于升级到最新版本 jQuery 的提示

于 2013-03-11T08:08:26.020 回答
3

live您可以定义一个小插件,通过调用为您提供旧功能,on但这只会让您使用更糟糕的代码。您需要重构代码才能on正确使用。

帮助您更轻松地管理初始更改的解决方案是使用正则表达式进行替换。大多数文本编辑器都可以让您这样做。

对于您提供的用例,您可以使用它(JavaScript 中的示例,适应您的编辑器):

var output = input.replace(
      /\$\(\"([^\"]+)\"\)\.live\(\"([^\"]+)\"/g,
      '$(document.body).on("$2", "$1"'
);

输入 :

$(".item").live("click",function(){ alert("test"); });
$(".item2").live("change",function(){ console.log("test"); });

输出 :

$(document.body).on("click", ".item",function(){ alert("test"); });
$(document.body).on("change", ".item2",function(){ window.top.console.log("test"); }); 

在这个初始转换之后,您将不得不寻找比document.body.

于 2013-03-11T07:40:36.077 回答
2

与@destroy 的回答类似——其他的尝试——在备份你的文件之后

我没有 Komodo,但设法为 Notepad++ 开发了以下内容:

寻找

\$\("(.+)"\).live\("(.+)",

用。。。来代替

$(document).on('\2', '\1',

正则表达式语法各不相同,因此您可能必须使用它。

您可能还需要调整或运行正则表达式的多个变体,例如满足单引号与双引号或空格的需求。

于 2013-03-11T08:17:22.947 回答