用 css 或 jquery 覆盖 !important

Posted

技术标签:

【中文标题】用 css 或 jquery 覆盖 !important【英文标题】:Overriding !important with css or jquery 【发布时间】:2012-08-11 08:58:34 【问题描述】:

(这是在 chrome 扩展中使用内容脚本)

我需要覆盖网页标记为!important 的一些css 属性。这可能吗?

例如,如果我想去掉标记为重要的边框:

$(".someclass").css('border','none'); //does not work

【问题讨论】:

你搜索过吗?我找到了***.com/questions/462537/… @ŠimeVidas:这个问题是关于 javascript 的;这个问题是关于 jQuery 的。最终的解决方案可能是相同的,但问题的作者不知道(我也不知道),我认为大多数开发人员会同意使用 jQuery 解决方案的最佳实践,如果存在的话。 How to apply !important using .css()?的可能重复 【参考方案1】:

给你:

$( '.someclass' ).each(function () 
    this.style.setProperty( 'border', 'none', 'important' );
);

现场演示: http://jsfiddle.net/Gtr54/

元素的style 对象的.setProperty 方法使您能够传递代表优先级的第三个参数。所以,你用你自己的 !important 值覆盖了一个 !important 值。据我所知,使用 jQuery 无法设置 !important 优先级,因此您唯一的选择是内置 .setProperty 方法。

【讨论】:

在 IE8 中失败并显示“对象不支持此属性或方法” @StuartDobson 是的,在 IE8 中失败-.- 在 Mosaic 2 中也失败了。 :-P 这是一个很好的答案,但有一点需要注意 - 如果 $('#container).style 不起作用 - 请改用 $('#container)[0].style @yaru 是的,style 属性仅适用于 DOM 元素本身,不适用于 jQuery 对象。【参考方案2】:

您也可以这样做:

$(".someclass").css("cssText", "border: none !important;");

【讨论】:

这将覆盖样式【参考方案3】:

这应该会有所帮助。

$(".someclass").attr("style","border:none!important");

已更新,以免覆盖所有样式:

var existingStyles = $(".someclass").attr("style");
$(".someclass").attr("style", existingStyles+"border:none!important");

【讨论】:

将替换所有其他样式【参考方案4】:

还有一种方法

$("#m_divList tbody").find("tr[data-uid=" + row.uid + "]").find('td').css("cssText", "color: red !important;");

css("cssText", "color: red !important;");

【讨论】:

【参考方案5】:

我们可以使用 jquery 添加类

$("someclass").addClass("test");

<style>
.test
border:none !important;

</style>

【讨论】:

这不适用于动态生成的样式(例如高度或颜色)。 jQuery devs are pitching this as a viable workaround. ? 简直太可笑了

以上是关于用 css 或 jquery 覆盖 !important的主要内容,如果未能解决你的问题,请参考以下文章

jquery循环:覆盖宽度?

覆盖 JQXWidget css 样式不起作用

用js修改带!important的css样式

jQuery CSS 类

如何在没有 !important 的情况下使用不同的类覆盖 css

jQuery - 获取并设置 CSS 类