【问题标题】:JavaScript: Listen for attribute change?JavaScript:监听属性变化?
【发布时间】:2017-05-16 10:50:52
【问题描述】:

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

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

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

function doit() {

}

我想对 something 属性的任何更改做出回应。

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

我想这样做没有 jQuery。

谢谢

【问题讨论】:

  • MutationObserver 适用于此。只需将其配置为侦听属性更改即可。将其设置为仅观察您感兴趣的元素。

标签: javascript attributes event-handling custom-events


【解决方案1】:

你需要MutationObserver,这里在sn-p我用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>

【讨论】:

  • 感谢您的回答和示例。一旦我简化了这一点,我认为这将是一种通过简单地更改和属性来对元素进行更复杂更改的好技术。它使 API 变得更简单。你知道原始浏览器的合理 polyfill 吗?
  • @Manngo,对于原始浏览器,您可以使用Mutation events,另请参阅davidwalsh.name/dom-events-javascript
  • 我看到它目前支持回到 IE9,并且在现代浏览器中仍然支持。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2023-02-08
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多