小编典典

是否可以收听“风格改变”事件?

all

是否可以在 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');

阅读 64

收藏
2022-05-30

共1个答案

小编典典

由于 jQuery 是开源的,我猜您可以调整css函数以在每次调用时调用您选择的函数(传递 jQuery 对象)。当然,您需要搜索 jQuery
代码以确保它在内部没有使用其他任何东西来设置 CSS 属性。理想情况下,您希望为 jQuery 编写一个单独的插件,这样它就不会干扰 jQuery
库本身,但您必须决定这对您的项目是否可行。

2022-05-30