2011-01-05 58 views
1

说我想制作一个名为'alertMeOnRemove'的小插件,这是一个不言自明的插件。我希望它只是覆盖调用它的元素的remove()函数。DOM元素特定功能覆盖或功能

$('a').alertMeOnRemove(); 
$('div').remove(); // no alert 
$('a.subset-of-a').remove(); //alert 
$('a').remove() //alert 

我知道一般重写jQuery函数是既可能又简单。这可能吗?

回答

2

是啊,这并不困难。

(function(){ 
    var _remove = $.fn.remove; 

    $.fn.alertMeOnRemove = function(){ 
     this.each(function(){ 
      $.data(this, 'alertMeOnRemove', true); 
     }); 
    }; 

    $.fn.remove = function(){ 
     this.each(function(){ 
      if ($.data(this, 'alertMeOnRemove')) { 
       alert('removing item'); 
      } 
     }); 

     _remove.call(this); 
    }; 
})(); 
+0

非常好!这正是我所期待的。没有完全按照你的要求工作,但是......'_remove.call(this);'必须在'.each()' – smdrager 2011-01-05 14:46:54

+0

以外。 – lonesomeday 2011-01-05 15:57:22

0

我真的不知道,如果我得到你,但你可以做到这一点,如:

var _oldRemove = $.fn.remove; 
$.fn.remove = function() { 
    if(/* some condition */) 
     alert('foobar'); 

    _oldRemove.apply(this, arguments); 
};