是否可以使HTML元素属性不可变
Is it possible to make HTML element attributes immutable?
如果我想使javascript对象的属性不可变,我可以使用Object方法,如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
的建议。
相关文章:
- 如何将不可变的js导入angular 2(alpha)
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- Css order属性不't在Jquery设置时更新
- JavaScript Array unshift() 以一种不可变的方式
- Bookshelf.js设置的属性不在数据库中
- 将对象从另一个不可变的Map分配给Map是否意味着深度克隆
- 查找数组's按属性不存在于另一个数组中的对象
- 函数在不可变的js和redux存储中
- 如何在JS中创建对象的可变和不可变副本
- 在javascript函数调用中传递的HTML属性不完整
- 在jQuery中链接时CSS属性不起作用
- 是否可以使HTML元素属性不可变
- 以不可变方式删除对象中的属性
- 涉及不可变属性的Javascript缩小逻辑
- ThreeJS r68中不可变的Object3D属性
- 具有直接属性访问的不可变javascript
- 冻结一个属性?或者如何将属性设置为不可变/只读
- 创建任何对象(包括深层属性)的只读/不可变副本
- 访问嵌套的不可变映射属性
- 如何使用不可变来移除深层属性