一尘不染

是否可以绑定到任何样式更改的事件侦听器

javascript

是否可以在jQuery中创建可以绑定到任何样式更改的事件侦听器?例如,如果我想在元素更改尺寸或对style属性进行任何其他更改时“执行”操作,则可以执行以下操作:

$('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');

阅读 239

收藏
2020-04-25

共1个答案

一尘不染

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

2020-04-25