有没有办法在更改元素类时在jQuery中触发事件?
示例:
<img class="selected" />
进入
<img class="selected newclass" />
触发事件
并且
<img class="selected" />
到
<img class="" />
触发事件
答案 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 观看元素类更改,就可以触发adding
或removing
类上的任何代码。再次,就像你使用jQuery一样,这个例子。
当然,您可以hook
和overwrite
任意javascript函数。
作为评论中提到的Nick Craver
,还有一些其他jQuery方法可以add
或remove
元素类。你必须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');
})
希望这会给你一些帮助