是否可以在 jQuery 中创建一个可以绑定到任何样式更改的事件侦听器?例如,如果我想在元素更改尺寸或样式属性中的任何其他更改时“做”某事,我可以做:
$('div').bind('style', function() { console.log($(this).css('height')); }); $('div').height(100); // yields '100'
这将非常有用。
有任何想法吗?
更新
很抱歉自己回答这个问题,但我写了一个可能适合其他人的简洁解决方案:
(function() { var ev = new $.Event('style'), orig = $.fn.css; $.fn.css = function() { $(this).trigger(ev); return orig.apply(this, arguments); } })();
这将临时覆盖内部prototype.css 方法并在最后使用触发器重新定义它。所以它是这样工作的:
$('p').bind('style', function(e) { console.log( $(this).attr('style') ); }); $('p').width(100); $('p').css('color','red');
由于 jQuery 是开源的,我猜您可以调整css函数以在每次调用时调用您选择的函数(传递 jQuery 对象)。当然,您需要搜索 jQuery 代码以确保它在内部没有使用其他任何东西来设置 CSS 属性。理想情况下,您希望为 jQuery 编写一个单独的插件,这样它就不会干扰 jQuery 库本身,但您必须决定这对您的项目是否可行。
css