【发布时间】:2021-05-14 07:17:12
【问题描述】:
根据当前的 CSS 规范,CSSStyleDeclaration.setProperty() 具有直接写入样式属性的简写。就像下面的代码一样,这两行具有相同的功能:
element.style.color = "#fff";
element.style.setProperty("color", "#fff");
虽然这里有一个有趣且不清楚的情况: 我找不到为单个样式属性挂钩自定义设置器的方法,因为它们没有明确的设置器。更改 setProperty 方法仅适用于直接调用方法 element.style.setProperty() 而不是简写(即 element.style.color)。
两者似乎都引用 CSSStyleDeclaration 接口,但我找不到为特定样式属性(即 element.style.color)定义 setter 的方法。
MDN 是这样说的:
虽然此属性被认为是只读的,但可以通过将字符串直接分配给 style 属性来设置内联样式。在这种情况下,字符串被转发到 CSSStyleDeclaration.cssText。以这种方式使用样式将完全覆盖元素上的所有内联样式。
据此,更改 cssText 的 setter 可能会拦截特定样式属性的 setter,但它仅适用于内联样式定义本身(即 element.style = 'color:#fff;')
有没有办法为单个样式属性(例如 element.style.color)定义自定义设置器,或者至少为其中任何一个设置通用设置器?
【问题讨论】:
-
你的意思是像
element.style.color.setProperty吗?我真的不明白 -
element.style.color.setProperty 不是一个东西。我指的是 element.style.color setter 来拦截像 element.style.color = "#fff"; 这样的集合操作
-
可能是
element.style.__defineSetter__("color", function(value){alert(`set color to: ${value}`)})? -
你不应该尝试“挂钩”像
CSSStyleDeclaration这样的原生接口
标签: javascript prototype getter-setter setter