我希望在HTML元素处理完某些其他无法控制的js进程后对其执行某些操作。
例如,给定 ......和一些第三方异步应用程序执行$('div.x')。each(function(){/ * do stuff * /; this.addClass('processed');});
当其类更改为“已处理”时,是否存在一些在div中注册兴趣的策略?
答案 0 :(得分:2)
这可能是一个坏主意,但我认为它比投票更好......
看一下未压缩的jQ lib,复制addClass,removeClass和attr的代码。
然后使用$ .fn.extend传递这些方法的新定义。你真的不会改变它们只是告诉他们在完成他们的事情之后调用this.trigger('classChange')。虽然在attr的情况下,你需要一个if语句告诉它只有在属性类是目标时才触发,或者如果键'class'在传入的哈希中。
然后你可以使用$(selector).bind('classChange',lambda);提供类更改所发生的操作。
当然,我从来没有试过超载核心方法,但我不明白为什么你不能。
可能看起来像这样。我从来没有看过内部,所以你可能无法将它包含在像ove doen这样的块中 - 你可能需要修改单个开关/如果情况或其他东西......
$.fn.extend({
addClass: function(class){
// standard jq logic
this.trigger('changeClass');
// standard return
},
removeClass: function(class){
// standard jq logic
this.trigger('changeClass');
return this;
},
attr: function(prop, val){
// standard jq logic
if(typeof prop == 'object' && typeof prop.class != 'undefined'){
this.trigger('changeClass');
} else if(typeof prop == 'string' && typeof val !== 'undefined' && prop == 'class'){
this.trigger('changeClass');
}
return this;
}
});
答案 1 :(得分:0)
不是我所知道的,来自JQuery events系列。
你可能想要实现区间轮询检查,虽然听起来有点混乱:P
答案 2 :(得分:0)
没有简单的解决方案。 Similar question here
查看PPK's list of browser events以查看可用内容。
答案 3 :(得分:0)
试试这个,
(function($){
$.each(["addClass","removeClass"],function(i,methodname){
var oldmethod = $.fn[methodname];
$.fn[methodname] = function(){
oldmethod.apply( this, arguments );
this.trigger(methodname+"change");
return this;
}
});
})(jQuery);
开始使用:
$('#demo').bind('addClass removeClass',function(event){
alert(event.type + " event triggered!");
});
从
获得解决方案