什么应该是jQuery.live()的正确替代品.我知道jQuery.on()做同样的事情,但是在jQuery.on()的情况下,我们必须指定父进程才能使它工作.
@H_502_2@假设我的页面上有500个直播,现在我想将所有500个实时更改为on并通过选择每个元素的父级来完成它将不可行并且需要更多时间.
@H_502_2@假设我有$(“.item”).live(“click”,function(){alert(“test”);});
@H_502_2@如果我用jQuery.on()替换它,那么它应该是$(“body”).on(“click”,“.item”,function(){alert(“test”);});
@H_502_2@但我想知道是否有一些快捷方式或其他任何东西来实现这一点
$(".item").on("click",function(){ alert("test"); });@H_502_2@所以我可以在几秒钟内更换所有.
解决方法
.live()死了,万岁.live():
https://github.com/jquery/jquery/commit/eed78cc321ed7e2b37fb34e32fbb528b24f61d6e @H_502_2@虽然认真,但对于你寻求的单线,你可以把它添加回来:
https://github.com/jquery/jquery/commit/eed78cc321ed7e2b37fb34e32fbb528b24f61d6e @H_502_2@虽然认真,但对于你寻求的单线,你可以把它添加回来:
jQuery.fn.live = function( types,data,fn ) { jQuery( this.context ).on( types,this.selector,fn ); return this; }@H_502_2@将它添加到JS的顶部以有效地创建一个垫片,允许您根据需要使用.live(),而不关心您正在使用的jQuery版本. @H_502_2@但实际上,就像其他人所说的那样,你应该使用你选择的文本编辑器或像sed这样的命令行实用程序来执行find-replaceall.在我给你的垫片解决方案中,你正在调用一个函数来调用另一个函数,这会引入很多开销,并且可能会使用不必要的资源. .on()效率更高,特别是如果你直接调用它. @H_502_2@更新:上面的解决方案依赖于jQuery的内部.context属性,自jQuery 1.10以来它就是has been deprecated,可能会在任何后续版本中消失.在大多数情况下应该满足您需求的替代版本是简单地用文档替换this.context.这具有.context property’s API中概述的限制:
@H_502_2@The value of this property is typically equal to document,as this is@H_502_2@所以它可能会失败.无论如何,到现在为止你绝对没有理由不直接使用.on().请随时查看my tips on upgrading to the most recent version of jQuery.
the default context for jQuery objects if none is supplied. The
context may differ if,for example,the object was created by
searching within an<iframe>
or XML document.