JavaScript:监听属性变化?

IT技术 javascript attributes event-handling custom-events
2021-02-09 14:36:59

是否可以在 JavaScript 中监听属性值的变化?例如:

var element=document.querySelector('…');
element.addEventListener( ? ,doit,false);

element.setAttribute('something','whatever');

function doit() {

}

我想对something属性中的任何更改做出响应

我已经阅读了该MutationObserver对象以及对象的替代方法(包括使用动画事件的那个)。据我所知,它们是关于对实际 DOM 的更改。我对特定 DOM 元素的属性更改更感兴趣,所以我认为不是这样。当然,在我的实验中它似乎不起作用。

我想在没有jQuery 的情况下做到这一点

谢谢

1个回答

你需要MutationObserver,在我用来setTimeout模拟修改属性的片段中

var element = document.querySelector('#test');
setTimeout(function() {
  element.setAttribute('data-text', 'whatever');
}, 5000)

var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (mutation.type === "attributes") {
      console.log("attributes changed")
    }
  });
});

observer.observe(element, {
  attributes: true //configure it to listen to attribute changes
});
<div id="test">Dummy Text</div>

@Manngo,对于原始浏览器,您可以使用Mutation 事件,也可以参见davidwalsh.name/dom-events-javascript
2021-03-18 14:36:59
我看到它目前支持回到 IE9,并且在现代浏览器中仍然受支持。再次感谢。
2021-04-02 14:36:59
感谢您的回答和示例。一旦我简化了这一点,我认为这将是通过简单地更改和属性对元素进行更复杂更改的好技术。它使 API 变得更简单。你知道原始浏览器的合理 polyfill 吗?
2021-04-06 14:36:59