2010-06-29 62 views
5

当元素类发生更改时,是否有方法在jQuery中触发事件?类名更改jQuery中的事件

实例:

<img class="selected" /> 

<img class="selected newclass" /> 

触发事件


而且

<img class="selected" /> 

<img class="" /> 

触发事件

+1

发生这种情况时,你想要做什么? – 2010-06-29 10:07:06

回答

9

您可能能够解决方法在一个小哈克的方式。 Hook.addClass() & .removeClass()像这样:

var _addClass = $.fn.addClass, 
    _removeClass = $.fn.removeClass; 

$.fn.addClass = function(){ 
    // do whatever here 
    return _addClass.apply(this, arguments); 
} 

$.fn.removeClass = function(){ 
    // do whatever here 
    return _removeClass.apply(this, arguments); 
} 

这样一来,假设你是看元素类的变化与jQuery的有兴趣,可以触发addingremoving类的任何代码。再说一次,就是如果你正在使用jQuery,这个例子。

当然,你可以用hookoverwrite这样的任何javascript函数。

由于Nick Craver在评论中提到,还有其他几种jQuery方法,它们可以是addremove元素类。你将不得不hook所有这些,即:

.addClass() 
.removeClass() 
.toggleClass() 
.removeAttr('class') 
.attr('class', 'changed') 

,除非你确切地知道哪些方法被调用来操纵一类,你就必须关心那些的。

+0

+1来提出这个想法..! – Kai 2010-06-29 10:13:42

+0

+1优雅的解决方案。 – jensgram 2010-06-29 10:25:59

+1

优雅,但要注意其他方法,'.toggleClass()','.attr('class')','.class =',有很多方法来改变一个类。我想有一个更简单的解决方案,但是需要知道OP的内容。 '.addClass('alreadyHadThisClass')''和'.removeClass('DidNotHaveThis')'没有任何效果,你也需要处理这个。 – 2010-06-29 10:38:20

-1

我不认为这是可能的。

事件基于用户操作,所以点击,dblclick,mouseover等都是用户操作。

您可能要制定每个元素在某种数据块,然后建立一个小系统,集成到jQuery的.class().attr()方法,所以,当你的代码更新的一类,将数据添加到元件保持以前的类,

然后如果上一个类与正在设置的类不同,则触发您的事件。

我说的整合是

var old_ClassFunc = $.fn.class; //Save it 

var $.fn.class = function() 
{ 
    if($(this).data('old-class')) 
    { 
     if($(this).data('class_callback'))# 
     { 
      $(this).data('class_callback')(this); 
     } 
    } 
    $(this).data('old-class',$(this).attr('class')); //Update Data 
    return old_class.apply(this,arguments); 
} 

那么你可以不喜欢

$('element').data('class_callback',function(context){ 
    alert('Element class has changed'); 
}) 

希望这给你一些帮助

+1

-1对于“事件基于用户操作” – sbichenko 2013-12-18 16:59:42