是否可以使HTML元素属性不可变?

时间:2014-12-01 04:12:50

标签: javascript html dom immutability

如果我想使javascript对象的属性不可变,我可以使用defineProperties()defineProperty()freeze()之类的Object方法。我的问题是,我如何对HTML元素属性做同样的事情?

我已经尝试过上述方法,虽然它们可以用来防止直接设置元素的属性(例如elem.id = 'foo';),但正如预期的那样,仍然可以通过{{1}更改基础属性}}

“不,不可能”的答案是可以接受的,但我还没有遇到任何明确的声明。

1 个答案:

答案 0 :(得分:4)

您可以使用变异观察器来恢复旧的属性值。

new MutationObserver(callback)
    .observe(elem, {attributes: true, attributeOldValue: true});

function callback(mutations, observer) {
    var target = mutations[0].target;
    observer.disconnect();
    mutations.forEach(function(mutation) {
        target.setAttribute(mutation.attributeName, mutation.oldValue);
    });
    observer.observe(target, {attributes: true, attributeOldValue: true});
}

感谢@DoctorDestructo提供了涉及observer.disconnect的建议,这些建议是避免无限循环所必需的。