Javascript:为每个HTML元素

时间:2018-02-11 12:10:32

标签: javascript

所以我不想创建一个改变元素样式属性的函数。
我不会这样称呼它:
element.setStyle("display","none");
我可以这样做:

function setStyle(elemnt,attr,val) {
    elemnt.style[attr] =val;
}

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

可以在现代浏览器上通过在HTMLElement.prototype上创建功能来执行此操作:



Object.defineProperty(HTMLElement.prototype, "setStyle", {
  value: function(name, value) {
    this.style[name] = value;
  }
});

document.getElementById("foo").setStyle("color", "green");

<div id="foo">Hi there</div>
&#13;
&#13;
&#13;

注意使用Object.defineProperty;只需分配(HTMLElement.prototype.setStyle = function...)就可以在原型上创建一个可枚举的属性,这通常不是一个好主意。

如果您这样做,只能在您自己的应用/网页代码中执行此操作,而不是(例如)在库代码中执行此操作。每当您的代码在您无法控制的情况下与其他代码结合使用时,请避免扩展内置函数。它要求与其他代码发生冲突。

并且要注意即使您没有将此与任何其他代码相结合,也会定期向DOM添加新方法。例如,如果您在4 - 5年前添加了一个名为closest的方法,那么您现在正在处理一个名为closest的方法已添加到元素的事实接口

答案 1 :(得分:0)

这是你要找的吗?

function setStyle(el, key, value) {
   el.style[key] = value;
}

setStyle(document.getElementById("test"), "color", "red");
<div id="test">test</div>