使用Jquery更改css属性时的事件检测

HP.*_*HP. 86 html javascript jquery

有没有办法检测元素的"display"css属性是否被更改(无论是否为block或block或inline-block ......)?如果没有,任何插件?谢谢

kan*_*gax 88

注意

自撰写本文以来,变异事件已被弃用,并且可能并非所有浏览器都支持.相反,使用变异观察者.

是的你可以.DOM L2 Events模块定义了突变事件 ; 其中之一 - DOMAttrModified是您需要的.当然,这些并没有得到广泛实施,但至少在Gecko和Opera浏览器中得到了支持.

尝试这些方面:

document.documentElement.addEventListener('DOMAttrModified', function(e){
  if (e.attrName === 'style') {
    console.log('prevValue: ' + e.prevValue, 'newValue: ' + e.newValue);
  }
}, false);

document.documentElement.style.display = 'block';
Run Code Online (Sandbox Code Playgroud)

您也可以尝试利用IE的"propertychange"事件作为替代DOMAttrModified.它应该允许style可靠地检测变化.

  • 该事件在w3c中已弃用.它必须是另一种方式. (12认同)
  • 由于API的设计存在缺陷,因此DOM事件规范中的变异事件已被标记为已弃用.变异观察者是拟议的替代者.这是链接[https://developer.mozilla.org/en-US/docs/DOM/Mutation_events] (8认同)
  • @Boldewyn:是的,但是更改元素祖先的`class`属性(或CSS中存在属性选择器的任何其他属性)也可以更改元素,因此您必须处理所有`DOMAttrModified`事件在文档根元素上,一定要抓住一切. (7认同)

Muh*_*eda 17

你可以使用attrchange jQuery插件.插件的主要功能是在HTML元素的属性更改上绑定侦听器函数.

代码示例:

$("#myDiv").attrchange({
    trackValues: true, // set to true so that the event object is updated with old & new values
    callback: function(evnt) {
        if(evnt.attributeName == "display") { // which attribute you want to watch for changes
            if(evnt.newValue.search(/inline/i) == -1) {

                // your code to execute goes here...
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)