【问题标题】:Style.display = 'none' does not work on BBC.com Overlay Element [duplicate]Style.display = 'none' 不适用于 BBC.com 覆盖元素 [重复]
【发布时间】:2021-11-07 12:23:12
【问题描述】:

所以这可能是一个奇怪的问题。但我试图在我的 Google Chrome 控制台中使用 element.style.display = 'none !important' 隐藏 bbc.com 网站上的某个 HTML 元素。奇怪的是,它并没有像我期望的那样隐藏元素。 也许这是一件小事,我只是在监督一些事情。

这是我使用的代码:

var overlay = document.querySelector("div[class='fc-dialog-overlay']");
overlay.style.display = 'none !important';

我没有收到错误,如果我检查元素,它还包含新属性,看起来像 <div class="fc-dialog-overlay" style="display: none;"></div>,但仍然可以看到。 class='fc-consent-root' 等其他几个元素也会出现同样的问题。

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    注意:不要做下面setAttribute的事情,使用setProperty,如this answer to the earlier question所示。 (当/如果它不被 OP 接受时,我会删除这个答案。)


    您指定的属性值无效; !important 可用于样式rules,但不能用于您通过style 对象指定的特定值。我很惊讶您在style 区域看到display: none。当我这样做时,我不使用 Chrome 或 Firefox(也许它是在完成 .display = "none" 之后没有看到它工作的结果?):

    const overlay = document.getElementById("example");
    overlay.style.display = "none !important";
    <div id="example">x</div>
    <div>y</div>

    如果我右键单击x 并查看它,它根本没有style,即使在代码运行之后。

    您仍然可以这样做,您只需分配给整个 style 属性,以便获得完整的规则解析:

    const overlay = document.getElementById("example");
    overlay.setAttribute(
        "style",
        overlay.getAttribute("style") + "; display: none !important"
    );
    #example {
        display: block !important;
    }
    <div id="example">x</div>
    <div>y</div>

    请注意,即使我通过样式表应用了冲突的!important 规则,它也可以工作。这是因为样式表!important 规则会覆盖内联样式,除非内联样式 具有!important

    【讨论】:

    • 谢谢@t.j。它工作得很好。也谢谢你的解释。再问一个问题可以更好地理解 - 规则解析是什么意思?
    • @SebastianSimon - 哇哦。直到!这不仅仅是一个替代方案,它是一个非常非常更好的替代方案。将其发布为答案?
    • @Peter - 在样式表或style 属性中,当您执行display: none !important 时,!important 不是值的一部分,值只是none!important 部分是优先级指示符。当您执行.style.display = "x" 时,您无法指定优先级指示符,该属性仅允许实际值。整个事情 (display: none !important) 是一个样式规则,它被解析为它的各个组件。但是当只需要一个值时,解析就不会完成。旁注:使用setProperty 如塞巴斯蒂安所示,而不是我上面的答案。 :-)
    • @T.J.Crowder 实际上,这似乎是 I'm unable to inject a style with an "!important" rule 的副本。
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多