Переопределение !important с помощью css или jquery

(Это использование сценариев содержимого в расширении Chrome)

Мне нужно перезаписать некоторые свойства css, которые веб-страница пометила как !important. Это возможно?

Например, если я хочу избавиться от границы, помеченной как важная:

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

person Wilson    schedule 15.08.2012    source источник
comment
Вы искали СО? Я нашел stackoverflow.com/questions/462537/   -  person Šime Vidas    schedule 15.08.2012
comment
@ŠimeVidas: этот вопрос касается Javascript; этот вопрос касается jQuery. В конце концов решение может быть таким же, но автор вопроса не знал бы об этом (и я тоже), и я думаю, что большинство разработчиков согласятся с тем, что лучше всего использовать решение jQuery, когда оно существует.   -  person Michael Scheper    schedule 22.04.2015
comment
Возможный дубликат Как применить !important с помощью .css()?   -  person Prateek    schedule 19.11.2018


Ответы (5)


Ну вот:

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

Текущая демонстрация: http://jsfiddle.net/Gtr54/

Метод .setProperty объекта style элемента позволяет передать третий аргумент, представляющий приоритет. Итак, вы переопределяете значение !important своим собственным значением !important. Насколько мне известно, невозможно установить приоритет !important с помощью jQuery, поэтому единственным вариантом является встроенный метод .setProperty.

person Šime Vidas    schedule 15.08.2012
comment
Сбой в IE8 с Object не поддерживает это свойство или метод - person stuartdotnet; 14.05.2013
comment
@StuartDobson Да, сбой в IE8 -.- - person Šime Vidas; 14.05.2013
comment
Сбой в Mosaic 2 тоже. :-П - person Michael Scheper; 22.04.2015
comment
Это отличный ответ с одной оговоркой: если $('#container).style не работает, вместо этого используйте $('#container)[0].style. - person yaru; 08.12.2016
comment
@yaru Да, свойство style доступно только для самого элемента DOM, а не для объекта jQuery. - person Šime Vidas; 08.12.2016
comment
благослови вас, сэр, благослови вас - person Cekaleek; 16.08.2019

Вы также можете сделать это:

$(".someclass").css("cssText", "border: none !important;");
person 9ete    schedule 12.09.2014
comment
это перезапишет стиль - person Miguel; 27.03.2015

Это должно помочь.

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

Обновлено, чтобы не перезаписывать все стили:

var existingStyles = $(".someclass").attr("style");
$(".someclass").attr("style", existingStyles+"border:none!important");
person Pallavi Dwivedi    schedule 15.11.2017
comment
Заменит все остальные стили - person melvin; 12.04.2018

есть и другой способ

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

css("cssText", "цвет: красный !важно;");

person user2244656    schedule 24.02.2015

мы можем просто добавить класс с помощью jquery

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

<style>
.test{
border:none !important;
}
</style>
person Shubham Chopra    schedule 24.05.2019
comment
Это не будет работать с динамически генерируемым стилем (например, высотой или цветом). Просто нелепо, что разработчики jQuery предлагают это как жизнеспособный обходной путь. ???? - person ADTC; 16.02.2021