类名更改jQuery中的事件

时间:2010-06-29 10:00:35

标签: jquery events triggers

有没有办法在更改元素类时在jQuery中触发事件?

示例:

<img class="selected" />

进入

<img class="selected newclass" />

触发事件


并且

<img class="selected" />

<img class="" />

触发事件

2 个答案:

答案 0 :(得分:9)

您可能能够以一种小巧的方式解决问题。 Hook .addClass()&amp; .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')

除非您确切地知道调用哪些方法来操作类,否则您将不得不关心所有这些方法。

答案 1 :(得分:-1)

我认为这不可能。

事件基于用户操作,因此click,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');
})

希望这会给你一些帮助