disabled = true可以在<style>上动态设置.为什么不静态?

Luc*_*ent 8 html javascript css stylesheet

要禁用<style>块,所有浏览器都允许设置document.styleSheets[x].disabled = true.但是,只有IE允许在标签本身上设置此属性<style disabled="true">.在其他浏览器中是否有解决方法?动态完成的事情也不能静态完成似乎很奇怪.

Way*_*ett 6

style元素没有名为的有效属性disabled.来自HTML规范:

<!ELEMENT STYLE - - %StyleSheet        -- style info -->
<!ATTLIST STYLE
  %i18n;                               -- lang, dir, for use with title --
  type        %ContentType;  #REQUIRED -- content type of style language --
  media       %MediaDesc;    #IMPLIED  -- designed for use with these media --
  title       %Text;         #IMPLIED  -- advisory title --
  >
Run Code Online (Sandbox Code Playgroud)

但是,HTMLStyleElementDOM接口确实具有这样的属性.从DOM规范:

interface HTMLStyleElement : HTMLElement {
           attribute boolean         disabled;
           attribute DOMString       media;
           attribute DOMString       type;
};
Run Code Online (Sandbox Code Playgroud)

不要将HTML元素与DOM中的对应元素混淆.动态完成的东西不能静态地完成并不奇怪.创建HTML和DOM规范是为了解决不同的问题.HTML是一种标记语言.DOM是用于表示文档中的对象并与之交互的约定.


Nea*_*ltz 6

扩展media@lampyridae的答案,您可以使用not. 要静态禁用样式标签,我使用media="not all",它在 Chrome 79 中对我有用。


cde*_*zaq 2

要静态地执行此操作,只需删除样式标签即可。

作为替代方案,您可以从 DOM 中删除样式节点,然后重新插入它以重新启用它。

  • 我确信这里的用例是从静态禁用样式开始,但稍后可以动态启用它们。 (3认同)
  • 如果以后想动态添加怎么办? (2认同)