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

如果我想使javascript对象的属性不可变,我可以使用defineProperties()defineProperty()freeze() 。 我的问题是,我怎么能做到HTML元素属性相同?

我已经尝试了上述方法,尽管它们可以用来防止直接设置元素的属性(例如elem.id = 'foo'; ),但是仍然可以通过setAttribute()更改基础属性, 。

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


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

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的建议,这些建议是避免无限循环所必需的。

链接地址: http://www.djcxy.com/p/82773.html

上一篇: Is it possible to make HTML element attributes immutable?

下一篇: Built in or extension?