是否有可能使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
的建议,这些建议是避免无限循环所必需的。
上一篇: Is it possible to make HTML element attributes immutable?