【发布时间】:2016-02-02 12:33:23
【问题描述】:
我有一个观察者,它会监听listitem divs 属性的任何变化,如果attibutes 发生变化,它会将那个div 的背景颜色设置为红色。
其实你可以自己轻松测试。打开 Chrome 的书签管理器,在控制台中启动此脚本,然后单击任何书签或文件夹。它将被染成红色。
问题在代码块中间提到:如果我使用setAttribute,脚本会挂掉。
第一种方法(使用style.attributeName)不适合我,因为在我的实际代码中我使用自定义属性,而不是background-color。
这个问题看起来很奇怪。有什么办法可以解决?
<div role="listitem"></div>
<div role="listitem"></div>
<div role="listitem"></div>
<script>
var target = document.querySelectorAll("[role='listitem']");
for (var i = 0; i < target.length; i++) {
// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// The Problem
// ===========
// This work well
mutation.target.style.backgroundColor = "red";
// But this doesn't
// mutation.target.setAttribute("style", "background-color: red;");
});
});
// configuration of the observer
var config = { attributes: true };
// pass in the target node, as well as the observer options
observer.observe(target[i], config);
}
</script>
【问题讨论】:
标签: javascript mutation-observers