是否可以作为jquery选择器的范围

时间:2018-02-15 20:56:06

标签: javascript jquery

我想调整jquery对象的范围,这样我就可以覆盖范围内的已添加函数,而无需更改其他地方仍在使用的函数。

以下是我要做的事情的一个示例,但它没有按预期工作。有人可以帮忙吗?

$.fn.method = function(){
    alert("old method");
}

(function ($) {

   //I want to scope functions to jquery in here

   $.fn.method = function(){
       alert("new Method")
   }

   $("#MyId").method(); //should alert NEW method | WORKS CORRECTLY!

})(jQuery)

$("#MyId").method(); //should alert OLD method | DOES NOT WORK CORRECTLY

2 个答案:

答案 0 :(得分:0)

是的,只需将所有内容复制到新的对象中即可:

{
 const fakeJquery = (...args) => jQuery(...args);
 Object.assign(fakeJquery, jQuery);
 fakeJquery.fn = {};

 (function ($) {
   $.fn.method = function(){
     alert("new Method")
   }

   $("#MyId").method(); 

 })(fakeJquery)
}

答案 1 :(得分:0)

一种方法是将方法保存在变量中,并在完成后使用“新方法”将其恢复

$.fn.method = function(){
    alert("old method");
};

(function ($) {

   //save method we are about to over write
   var x = $.fn.method;

   $.fn.method = function(){
       alert("new Method");
   };

   $("#MyId").method(); //should alert NEW method | WORKS CORRECTLY!

   //Restore method we over wrote
   $.fn.method = x;

})(jQuery);

$("#MyId").method(); //now alerts OLD method | WORKS CORRECTLY