jQuery中的类名更改事件

jQuery中的类名更改事件,jquery,events,triggers,Jquery,Events,Triggers,当元素类发生更改时,是否有方法在jQuery中触发事件 示例: 进入 触发事件 及 进入 触发事件我认为这是不可能的 事件基于用户操作,因此单击、dblclick、鼠标悬停等都是用户操作 您可能希望在每个元素上设计某种类型的数据块,然后构建一个小型系统,该系统集成到jQuery.class()和.attr()方法中,以便在代码更新类时将数据添加到包含前一个类的元素中 然后,如果前一个类与所设置的类不同,则触发事件 我所说的整合是 var old_ClassFunc = $.fn

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

示例:


进入


触发事件



进入



触发事件

我认为这是不可能的

事件基于用户操作,因此单击、dblclick、鼠标悬停等都是用户操作

您可能希望在每个元素上设计某种类型的数据块,然后构建一个小型系统,该系统集成到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');
})

希望这能给你一些帮助

你也许能用一种简单的方法解决问题<代码>钩子&像这样:

这样,假设您只是对使用jQuery查看元素类的更改感兴趣,那么您可以在
添加
删除
类时触发任何代码。同样,在本例中,如果您正在使用jQuery

当然,您可以通过这种方式
hook
overwrite
任何javascript函数

正如尼克·克雷弗(Nick Craver)在评论中提到的那样,还有其他几种jQuery方法可以添加或删除元素类。您必须钩住所有这些,即:

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

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

发生这种情况时,您想做什么?很好,但请注意此处的其他方法,
.toggleClass()
.attr('class')
.class=
,有很多方法可以更改类。我认为有一个更简单的解决方案,但需要知道OP的目的是什么。另外,
.addClass('alreadyHadThisClass')
.removeClass('DidNotHaveThis')
没有净效果,您也需要处理这个问题。标记为“已解决”以快速,首先必须检查它是否适用于所有情况。@Andreas-你到底想做什么?我有一个jQuery插件,当它改变某些东西时,没有一个好的事件显示。。所以我想我会这样做。但是我会更仔细地检查一个更好的解决方案,如果我发现了,我会把它贴在这里:)我仍然会把它标记为已解决,因为它回答了我的问题。jQuery中不是有一个函数可以让所有这些函数都通过吗?将所有这些类函数收集到一个公共函数,甚至是一个公共属性更改函数,这是一件明智的事情吗?
<img class="" />
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');
})
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);
}
.addClass()
.removeClass()
.toggleClass()
.removeAttr('class')
.attr('class', 'changed')