У меня проблемы с применением стиля, который есть !important
. Я пробовал:
$("#elem").css("width", "100px !important");
Это делает ничего делает ; стиль ширины не применяется. Есть ли способ применения такого стиля в jQuery-иш без необходимости перезаписи cssText
(что означало бы, что мне нужно сначала его проанализировать и т. Д.)?
Изменить : я должен добавить, что у меня есть таблица стилей с!important
стилем, который я пытаюсь переопределить с помощью !important
встроенного стиля, поэтому использование .width()
и тому подобное не работает, так как он переопределяется моим внешним !important
стилем.
Также вычисляется значение, которое переопределит предыдущее значение. , поэтому я не могу просто создать другой внешний стиль.
javascript
jquery
html
css
mkoryak
источник
источник
.css
и!important
в ядре jQuery. Ошибка была закрыта как «не будет исправлена». Тем не менее, тестовый пример этой ошибки не был таким ограничительным, как в этом вопросе - у тестового примера не было встроенного!important
стиля, который он пытался переопределить. Таким образом, предлагаемый обход этой ошибки не будет работать в этом случае.Ответы:
Проблема вызвана тем, что jQuery не понимает
!important
атрибут и не может применять правило.Возможно, вы сможете обойти эту проблему и применить правило, обратившись к нему через
addClass()
:Или с помощью
attr()
:Последний подход, тем не менее, отменял бы любые ранее установленные правила встроенного стиля. Так что используйте с осторожностью.
Конечно, есть хороший аргумент, что метод @Nick Craver проще / мудрее.
Вышеуказанный
attr()
подход слегка изменен, чтобы сохранить исходнуюstyle
строку / свойства, и изменен в соответствии с предложением falko в комментарии:источник
'undefinedwidth: 100px !important;'
когда текущий стиль пуст.Я думаю, что нашел реальное решение. Я сделал это в новую функцию:
jQuery.style(name, value, priority);
Вы можете использовать его для получения значений с помощью
.style('name')
like.css('name')
, получения CSSStyleDeclaration.style()
, а также для установки значений - с возможностью указать приоритет как «важный». Смотрите это .демонстрация
Вот вывод:
Функция
Смотрите это для примеров того, как читать и устанавливать значения CSS. Моя проблема заключалась в том, что я уже установил
!important
ширину в своем CSS, чтобы избежать конфликтов с CSS другой темы, но на любые изменения, которые я внес в ширину в jQuery, это не повлияет, так как они будут добавлены в атрибут style.Совместимость
В этой статье говорится, что для установки с приоритетом используется
setProperty
функция IE 9+ и всех других браузеров. Я пытался с IE 8, и он потерпел неудачу, поэтому я встроил поддержку для своих функций (см. Выше). Он будет работать во всех других браузерах, использующих setProperty, но для работы в <IE 9 потребуется мой собственный код.источник
!important
в своих стилях, по крайней мере, для вещей, которые вы собираетесь изменить с помощью jQuery ... Пока они являются вашими стилями. Если ваш код работает на странице, закодированной студентом, который обходит свое незнание правил специфики, подбрасывая!important
каждый второй стиль, вы!importants
рано или поздно столкнетесь с одним из них .Вы можете установить ширину напрямую, используя
.width()
это:Обновлено для комментариев: у вас также есть эта опция, но она заменит все CSS на элементе, поэтому не уверен, что он более жизнеспособен:
источник
$('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');
сопоставив его с предыдущим значениемПримечание. Использование Chrome может привести к ошибке, такой как:
Изменение строки для использования
.removeProperty
функции, например, чтобыelem[0].style.removeProperty('width');
исправить проблему.источник
var = document.getElementById('elem');
и выполните методы стиля для elem (в отличие от elem [0]). Приветствия.var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
.removeAttribute
. Кажется, это метод только для IE . @mcoenca комментарий правильный;.removeProperty
работает отлично. Это IE9 + согласно MSDNelem.next().get(0).style...
Ответ Дэвида Томаса описывает способ использования
$('#elem').attr('style', …)
, но предупреждает, что его использование удалит ранее установленные стили вstyle
атрибуте. Вот способ использованияattr()
без этой проблемы:Как функция:
Вот демонстрация JS Bin .
источник
addStyleAttribute()
также может быть изменен, чтобы принимать те же параметры, что и JQuery.css()
. Например, он может поддерживать отображение карты свойств CSS на их значения. Если бы вы сделали это, вы бы в основном повторно реализовали.css()
с!important
исправленной ошибкой, но без каких-либо оптимизаций.После прочтения других ответов и экспериментов, вот что работает для меня:
Это не работает в IE 8 и ниже, хотя.
источник
Ты можешь сделать это:
Использование «cssText» в качестве имени свойства и того, что вы хотите добавить в CSS в качестве его значения.
источник
cssText
было там раньше - так что вы не можете использовать его свободноВы можете достичь этого двумя способами:
источник
.prop()
функция была добавлена в jQuery v1.6 и будет работать в Chrome ... это процитировано со страницы поддержки: до jQuery 1.6.attr()
метод иногда учитывал значения свойств при извлечении некоторых атрибутов, что могло вызвать противоречивое поведение. Начиная с jQuery 1.6,.prop()
метод предоставляет способ явного извлечения значений свойств при одновременном.attr()
извлечении атрибутов.Нет необходимости вдаваться в сложность ответа @ AramKocharyan или в необходимость динамической вставки каких-либо тегов стиля.
Просто переписать стиль, но вам не нужно ничего анализировать, с чего бы вы?
Не могу использовать
removeProperty()
, потому что это не удалит!important
правила в Chrome.Не может использовать
element.style[property] = ''
, потому что он принимает только camelCase в Firefox.Вероятно, вы можете сделать это короче с помощью jQuery, но эта функция будет работать в современных браузерах, Internet Explorer 8 и т. Д.
источник
Вот что я сделал после столкновения с этой проблемой ...
источник
Это решение не отменяет ни один из предыдущих стилей, оно просто применяет тот, который вам нужен:
источник
Если это не так актуально и поскольку вы имеете дело с одним элементом, который
#elem
вы можете изменить, вы можете изменить его идентификатор на что-то другое и стилизовать его по своему желанию ...И в вашем CSS:
источник
Вместо использования
css()
функции попробуйтеaddClass()
функцию:источник
Самым простым и лучшим решением для этой проблемы от меня было просто использовать addClass () вместо .css () или .attr ().
Например:
$('#elem').addClass('importantClass');
И в вашем файле CSS:
источник
К вашему сведению, это не работает, потому что jQuery не поддерживает его. В 2012 году был подан тикет ( ошибка # 11173 $ (elem) .css («свойство», «значение! Важное») ), который в итоге был закрыт как WONTFIX.
источник
Большинство из этих ответов уже устарели, поддержка IE7 не является проблемой.
Лучший способ сделать это с поддержкой IE11 + и всех современных браузеров :
Или, если вы хотите, вы можете создать небольшой плагин jQuery, который делает это. Этот плагин близко соответствует собственному
css()
методу jQuery по параметрам, которые он поддерживает:Пример jsfiddle здесь .
источник
Нам нужно сначала удалить предыдущий стиль. Я удаляю это с помощью регулярного выражения. Вот пример для изменения цвета:
источник
$selector.css('cssText','margin-bottom: 0 !important')
Альтернативный способ добавить стиль в голову:
Это добавляет стиль после всех ваших файлов CSS, поэтому он будет иметь более высокий приоритет, чем другие файлы CSS, и будет применяться.
источник
Может быть, это выглядит так:
кэш
Установить CSS
Удалить CSS
источник
Я думаю, что он работает нормально и может переписать любой другой CSS раньше (это: элемент DOM):
источник
Делай это так:
источник
Это решение оставит весь вычисленный javascript и добавит важный элемент в элемент: Вы можете сделать это (например, если вам нужно установить ширину с важным тегом)
источник
Три рабочих примера
У меня была похожая ситуация, но я использовал .find () после долгого времени борьбы с .closest () со многими вариантами.
Пример кода
альтернатива
Работает: http://jsfiddle.net/fx4mbp6c/
источник
.indexOf()
функцию на более кросс-браузерную. Используйте, скорее,.match()
или.test()
вместо.indexOf()
var contents =
?Это может или не может быть подходящим для вашей ситуации, но вы можете использовать селекторы CSS для многих ситуаций такого типа.
Например, если вы хотите, чтобы 3-й и 6-й экземпляры .cssText имели разную ширину, вы можете написать:
Или:
источник
.cssText
.:nth-of-type()
не делает то, что вы думаете, что делает. Смотрите здесь для объяснения.li
элементов. Все они имеют один и тот же тип элементаli
, с которым имеет дело селектор. Если бы вы смешивали разные элементы в одном и том же родительском элементе, то:nth-of-type()
вели бы себя по-разному, особенно когда вы добавляете селектор класса в смесь.Я предполагаю, что вы попробовали это без добавления
!important
?Встроенный CSS (именно так JavaScript добавляет стилизацию) переопределяет таблицу стилей CSS. Я уверен, что это так, даже если есть правило CSS таблицы стилей
!important
.Другой вопрос (может быть, глупый, но его нужно задать.): Элемент, над которым вы пытаетесь работать,
display:block;
илиdisplay:inline-block;
?Не зная вашего опыта в CSS ... встроенные элементы не всегда ведут себя так, как вы ожидаете.
источник
Мы можем использовать setProperty или cssText, чтобы добавить
!important
элемент DOM, используя JavaScript.Пример 1:
Пример 2:
источник
Я также обнаружил, что некоторые элементы или надстройки (такие как Bootstrap) имеют некоторые особые классы, в которых они не очень хорошо
!important
работают или другие обходные пути, такие как.addClass/.removeClass
, и, таким образом, вам приходится включать / выключать их.Например, если вы используете что-то вроде
<table class="table-hover">
единственного способа успешно изменить элементы, такие как цвета строк, это включитьtable-hover
/ выключить класс, как это$(your_element).closest("table").toggleClass("table-hover");
Надеюсь, этот обходной путь будет полезен кому-то! :)
источник
У меня была такая же проблема, когда я пытался изменить цвет текста пункта меню, когда "событие". Лучший способ, который я нашел, когда у меня была такая же проблема:
Первый шаг: создайте в своем CSS новый класс с этой целью, например:
Последний шаг: примените этот класс, используя метод addClass следующим образом:
Задача решена.
источник
Самый безопасный обходной путь - это добавить класс, а затем сделать магию в CSS :-),
addClass()
и онremoveClass()
должен выполнить эту работу.источник
https://jsfiddle.net/xk6Ut/256/
Альтернативный подход - динамическое создание и обновление класса CSS в JavaScript. Чтобы сделать это, мы можем использовать элемент style и нам нужно использовать идентификатор для элемента style, чтобы мы могли обновить класс CSS
...
источник