Как применить! Важные с помощью .css ()?

735

У меня проблемы с применением стиля, который есть !important. Я пробовал:

$("#elem").css("width", "100px !important");

Это делает ничего делает ; стиль ширины не применяется. Есть ли способ применения такого стиля в jQuery-иш без необходимости перезаписи cssText(что означало бы, что мне нужно сначала его проанализировать и т. Д.)?

Изменить : я должен добавить, что у меня есть таблица стилей с!important стилем, который я пытаюсь переопределить с помощью !importantвстроенного стиля, поэтому использование .width()и тому подобное не работает, так как он переопределяется моим внешним !importantстилем.

Также вычисляется значение, которое переопределит предыдущее значение. , поэтому я не могу просто создать другой внешний стиль.

mkoryak
источник
Стоит отметить, что это на самом деле работает в Chrome (по крайней мере для меня), но не в Firefox.
Питер Ярич
Это также работает для меня в Chrome 17.x и Safari 5.1.1, но не в FF 8.0.
DavidJ
У меня не работает на Chromium 20.0.x с использованием JQuery 1.8.2.
Альба Мендес
7
Ошибка jQuery # 11173 была об исправлении .cssи !importantв ядре jQuery. Ошибка была закрыта как «не будет исправлена». Тем не менее, тестовый пример этой ошибки не был таким ограничительным, как в этом вопросе - у тестового примера не было встроенного !importantстиля, который он пытался переопределить. Таким образом, предлагаемый обход этой ошибки не будет работать в этом случае.
Рори О'Кейн
2
Возможный дубликат переопределения! Важный с css или jquery - хотя этот является более старым и более высоко оцененным, у другого самый ясный и ценный ответ.
Джейсон С

Ответы:

604

Проблема вызвана тем, что jQuery не понимает !importantатрибут и не может применять правило.

Возможно, вы сможете обойти эту проблему и применить правило, обратившись к нему через addClass():

.importantRule { width: 100px !important; }

$('#elem').addClass('importantRule');

Или с помощью attr():

$('#elem').attr('style', 'width: 100px !important');

Последний подход, тем не менее, отменял бы любые ранее установленные правила встроенного стиля. Так что используйте с осторожностью.

Конечно, есть хороший аргумент, что метод @Nick Craver проще / мудрее.

Вышеуказанный attr()подход слегка изменен, чтобы сохранить исходную styleстроку / свойства, и изменен в соответствии с предложением falko в комментарии:

$('#elem').attr('style', function(i,s) { return (s || '') + 'width: 100px !important;' });
Дэвид говорит восстановить Монику
источник
2
Я склоняюсь к вашему последнему подходу, но что печально, так это то, что плохо, вероятно, в конечном итоге придется анализировать предыдущий cssText, потому что я не могу просто отказаться от него
mkoryak
1
ах, извините, не могу понять, иногда английский юмор выходит за рамки моего понимания ... :)
Синан
1
Что с вложенными кавычками («ширина: 100 пикселей! Важно»)? Это не сработало для меня, но когда я удалил внутренние кавычки, это сработало. Спасибо!
Питер Ярич
15
Небольшое исправление, когда стиль пуст: $ ('# elem'). attr ('style', function (i, s) {return (s || '') + 'width: 100px! Important;'});
Фалько
4
Вы должны добавить исправление @ falko, так как в Firefox ваш последний фрагмент будет устанавливать стиль, 'undefinedwidth: 100px !important;'когда текущий стиль пуст.
acdcjunior
332

Я думаю, что нашел реальное решение. Я сделал это в новую функцию:

jQuery.style(name, value, priority);

Вы можете использовать его для получения значений с помощью .style('name')like .css('name'), получения CSSStyleDeclaration .style(), а также для установки значений - с возможностью указать приоритет как «важный». Смотрите это .

демонстрация

var div = $('someDiv');
console.log(div.style('color'));
div.style('color', 'red');
console.log(div.style('color'));
div.style('color', 'blue', 'important');
console.log(div.style('color'));
console.log(div.style().getPropertyPriority('color'));

Вот вывод:

null
red
blue
important

Функция

(function($) {    
  if ($.fn.style) {
    return;
  }

  // Escape regex chars with \
  var escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  };

  // For those who need them (< IE 9), add support for CSS functions
  var isStyleFuncSupported = !!CSSStyleDeclaration.prototype.getPropertyValue;
  if (!isStyleFuncSupported) {
    CSSStyleDeclaration.prototype.getPropertyValue = function(a) {
      return this.getAttribute(a);
    };
    CSSStyleDeclaration.prototype.setProperty = function(styleName, value, priority) {
      this.setAttribute(styleName, value);
      var priority = typeof priority != 'undefined' ? priority : '';
      if (priority != '') {
        // Add priority manually
        var rule = new RegExp(escape(styleName) + '\\s*:\\s*' + escape(value) +
            '(\\s*;)?', 'gmi');
        this.cssText =
            this.cssText.replace(rule, styleName + ': ' + value + ' !' + priority + ';');
      }
    };
    CSSStyleDeclaration.prototype.removeProperty = function(a) {
      return this.removeAttribute(a);
    };
    CSSStyleDeclaration.prototype.getPropertyPriority = function(styleName) {
      var rule = new RegExp(escape(styleName) + '\\s*:\\s*[^\\s]*\\s*!important(\\s*;)?',
          'gmi');
      return rule.test(this.cssText) ? 'important' : '';
    }
  }

  // The style function
  $.fn.style = function(styleName, value, priority) {
    // DOM node
    var node = this.get(0);
    // Ensure we have a DOM node
    if (typeof node == 'undefined') {
      return this;
    }
    // CSSStyleDeclaration
    var style = this.get(0).style;
    // Getter/Setter
    if (typeof styleName != 'undefined') {
      if (typeof value != 'undefined') {
        // Set style property
        priority = typeof priority != 'undefined' ? priority : '';
        style.setProperty(styleName, value, priority);
        return this;
      } else {
        // Get style property
        return style.getPropertyValue(styleName);
      }
    } else {
      // Get CSSStyleDeclaration
      return style;
    }
  };
})(jQuery);

Смотрите это для примеров того, как читать и устанавливать значения CSS. Моя проблема заключалась в том, что я уже установил!important ширину в своем CSS, чтобы избежать конфликтов с CSS другой темы, но на любые изменения, которые я внес в ширину в jQuery, это не повлияет, так как они будут добавлены в атрибут style.

Совместимость

В этой статье говорится, что для установки с приоритетом используется setPropertyфункция IE 9+ и всех других браузеров. Я пытался с IE 8, и он потерпел неудачу, поэтому я встроил поддержку для своих функций (см. Выше). Он будет работать во всех других браузерах, использующих setProperty, но для работы в <IE 9 потребуется мой собственный код.

Арам Кочарян
источник
Вы проверяли это в других браузерах?
mkoryak
2
Существует также плагин jQuery.important, который был опубликован пару лет назад. Я использую его в производстве только с одной незначительной проблемой (см.
Вкладку «
14
$ ('.someclass') .each (function () {this.style.setProperty ('border', 'none', 'Important');}); stackoverflow.com/questions/11962962/… Проще, чище и эффективнее.
3
Единственный хороший способ справиться с этим - использовать классы, а не прямое внедрение стиля.
Ричард
3
@Richard, единственный хороший способ справиться с этим - не использовать !importantв своих стилях, по крайней мере, для вещей, которые вы собираетесь изменить с помощью jQuery ... Пока они являются вашими стилями. Если ваш код работает на странице, закодированной студентом, который обходит свое незнание правил специфики, подбрасывая !importantкаждый второй стиль, вы !importantsрано или поздно столкнетесь с одним из них .
Септаграмма
149

Вы можете установить ширину напрямую, используя .width()это:

$("#elem").width(100);

Обновлено для комментариев: у вас также есть эта опция, но она заменит все CSS на элементе, поэтому не уверен, что он более жизнеспособен:

$('#elem').css('cssText', 'width: 100px !important');
Ник Крейвер
источник
Хорошо, я использовал в качестве примера, что меня волнует, настройки! важно.
mkoryak
1
также я отредактировал вопрос, чтобы лучше отразить мою ситуацию .. в основном у меня есть внешняя! важная ширина, которая установлена ​​на что-то плохое, что я должен переопределить встроенным. width () не работает по этой причине
mkoryak
@mkoryak - обновляется только с помощью другой, не относящейся к классу опции, не уверенной, подойдет ли она вашей ситуации или нет.
Ник Крейвер
1
Но он переопределит любой другой стиль, непосредственно примененный к элементу. stackoverflow.com/a/11723492/491044 проще всего реализовать.
trgraglia
10
предотвратить переопределения, $('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');сопоставив его с предыдущим значением
Абель Каллехо
81
const elem = $("#elem");
elem[0].style.removeAttribute('width');
elem[0].style.setProperty('width', '100px', 'important');

Примечание. Использование Chrome может привести к ошибке, такой как:

elem [0] .style.removeAttribute не является функцией

Изменение строки для использования .removePropertyфункции, например, чтобы elem[0].style.removeProperty('width');исправить проблему.

BettaSplendens
источник
10
Это один из лучших ответов. Просто и все работает. И это не требует особых объяснений. Это просто обычный JavaScript, за исключением селектора jQuery. jQuery не предоставляет поддержку для «важных», поэтому использование обычного JS - путь к успеху
OMA
2
Если вы хотите использовать Vanilla, просто создайте var = document.getElementById('elem');и выполните методы стиля для elem (в отличие от elem [0]). Приветствия.
хамболайт
3
В vanilla JS удаление атрибута не работает. Сделайте следующее. var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
mcoenca
2
Также были проблемы с .removeAttribute. Кажется, это метод только для IE . @mcoenca комментарий правильный; .removePropertyработает отлично. Это IE9 + согласно MSDN
FelipeAls
2
@Dejan, извините за очень поздний ответ, но это должно сработать:elem.next().get(0).style...
RedClover
54

Ответ Дэвида Томаса описывает способ использования $('#elem').attr('style', …), но предупреждает, что его использование удалит ранее установленные стили в styleатрибуте. Вот способ использования attr()без этой проблемы:

var $elem = $('#elem');
$elem.attr('style', $elem.attr('style') + '; ' + 'width: 100px !important');

Как функция:

function addStyleAttribute($element, styleAttribute) {
    $element.attr('style', $element.attr('style') + '; ' + styleAttribute);
}
addStyleAttribute($('#elem'), 'width: 100px !important');

Вот демонстрация JS Bin .

Рори О'Кейн
источник
2
addStyleAttribute()также может быть изменен, чтобы принимать те же параметры, что и JQuery.css() . Например, он может поддерживать отображение карты свойств CSS на их значения. Если бы вы сделали это, вы бы в основном повторно реализовали .css()с !importantисправленной ошибкой, но без каких-либо оптимизаций.
Рори О'Кейн
1
Это хорошо работает для меня, так как ширина была определена в классе CSS, и мне нужно было динамически переопределить ее с помощью значения, рассчитанного на основе ширины окна браузера и содержимого.
Крис Раско
30

После прочтения других ответов и экспериментов, вот что работает для меня:

$(".selector")[0].style.setProperty( 'style', 'value', 'important' );

Это не работает в IE 8 и ниже, хотя.

Nate
источник
1
и так как мы все еще должны поддерживать IE8 (некоторым из нас не повезло) - это нехорошо.
mkoryak
27

Ты можешь сделать это:

$("#elem").css("cssText", "width: 100px !important;");

Использование «cssText» в качестве имени свойства и того, что вы хотите добавить в CSS в качестве его значения.

hawkeye126
источник
5
Недостатком этого является то, что он будет перезаписывать все, что cssTextбыло там раньше - так что вы не можете использовать его свободно
mkoryak
1
в любом случае, вы можете использовать $ ("# elem"). css ("cssText", "+ =; width: 100px! важный;");
lexa-b
18

Вы можете достичь этого двумя способами:

$("#elem").prop("style", "width: 100px !important"); // this is not supported in chrome
$("#elem").attr("style", "width: 100px !important");
ква
источник
На самом деле, .prop()функция была добавлена ​​в jQuery v1.6 и будет работать в Chrome ... это процитировано со страницы поддержки: до jQuery 1.6 .attr()метод иногда учитывал значения свойств при извлечении некоторых атрибутов, что могло вызвать противоречивое поведение. Начиная с jQuery 1.6, .prop()метод предоставляет способ явного извлечения значений свойств при одновременном .attr()извлечении атрибутов.
Мотти
1
Не очень хорошая идея для общего решения. Вы можете переопределить свой существующий стиль, используя это.
Нирав Завери
14

Нет необходимости вдаваться в сложность ответа @ AramKocharyan или в необходимость динамической вставки каких-либо тегов стиля.

Просто переписать стиль, но вам не нужно ничего анализировать, с чего бы вы?

// Accepts the hyphenated versions (i.e. not 'cssFloat')
function addStyle(element, property, value, important) {
    // Remove previously defined property
    if (element.style.setProperty)
        element.style.setProperty(property, '');
    else
        element.style.setAttribute(property, '');

    // Insert the new style with all the old rules
    element.setAttribute('style', element.style.cssText +
        property + ':' + value + ((important) ? ' !important' : '') + ';');
}

Не могу использовать removeProperty(), потому что это не удалит !importantправила в Chrome.
Не может использовать element.style[property] = '', потому что он принимает только camelCase в Firefox.

Вероятно, вы можете сделать это короче с помощью jQuery, но эта функция будет работать в современных браузерах, Internet Explorer 8 и т. Д.

Hashbrown
источник
12

Вот что я сделал после столкновения с этой проблемой ...

var origStyleContent = jQuery('#logo-example').attr('style');
jQuery('#logo-example').attr('style', origStyleContent + ';width:150px !important');
kebyang
источник
Спасибо, это гораздо проще реализовать, чем пользовательский плагин (даже если он потенциально разрушает другие встроенные стили).
Phrogz
9

Это решение не отменяет ни один из предыдущих стилей, оно просто применяет тот, который вам нужен:

var heightStyle = "height: 500px !important";
if ($("foo").attr('style')) {
  $("foo").attr('style', heightStyle + $("foo").attr('style').replace(/^height: [-,!,0-9,a-z, A-Z, ]*;/,''));
else {
  $("foo").attr('style', heightStyle);
}
Ален Бовуа
источник
9

Если это не так актуально и поскольку вы имеете дело с одним элементом, который #elemвы можете изменить, вы можете изменить его идентификатор на что-то другое и стилизовать его по своему желанию ...

$('#elem').attr('id', 'cheaterId');

И в вашем CSS:

#cheaterId { width: 100px;}
Синан
источник
9
Почему вы меняете идентификатор, чтобы применить CSS, а не просто добавить класс CSS?
TeKapa
8

Вместо использования css()функции попробуйте addClass()функцию:

  <script>
  $(document).ready(function() {
    $("#example").addClass("exampleClass");
  });
  </script>

  <style>
  .exampleClass{
    width:100% !important;
    height:100% !important;
  }
  </style>
user3778043
источник
ОП написал, что значение свойства рассчитывается динамически, поэтому ваш ответ на него не работает.
Себастьян Зартнер
Это решение сработало для меня. Я не думаю, что у меня есть точные потребности в качестве оригинального постера, но он работает там, где css () нет.
Leekei
2
Это действительно вполне разумное решение проблемы ... только не эта проблема!
Мкоряк
8

Самым простым и лучшим решением для этой проблемы от меня было просто использовать addClass () вместо .css () или .attr ().

Например:

$('#elem').addClass('importantClass');

И в вашем файле CSS:

.importantClass {
    width: 100px !important;
}
Джек Фэйрфилд
источник
1
Поскольку ширина вычисляется в JavaScript, это не решает проблему.
Крис
7

Большинство из этих ответов уже устарели, поддержка IE7 не является проблемой.

Лучший способ сделать это с поддержкой IE11 + и всех современных браузеров :

const $elem = $("#elem");
$elem[0].style.setProperty('width', '100px', 'important');

Или, если вы хотите, вы можете создать небольшой плагин jQuery, который делает это. Этот плагин близко соответствует собственному css()методу jQuery по параметрам, которые он поддерживает:

/**
 * Sets a CSS style on the selected element(s) with !important priority.
 * This supports camelCased CSS style property names and calling with an object 
 * like the jQuery `css()` method. 
 * Unlike jQuery's css() this does NOT work as a getter.
 * 
 * @param {string|Object<string, string>} name
 * @param {string|undefined} value
 */   
jQuery.fn.cssImportant = function(name, value) {
  const $this = this;
  const applyStyles = (n, v) => {
    // Convert style name from camelCase to dashed-case.
    const dashedName = n.replace(/(.)([A-Z])(.)/g, (str, m1, upper, m2) => {
      return m1 + "-" + upper.toLowerCase() + m2;
    }); 
    // Loop over each element in the selector and set the styles.
    $this.each(function(){
      this.style.setProperty(dashedName, v, 'important');
    });
  };
  // If called with the first parameter that is an object,
  // Loop over the entries in the object and apply those styles. 
  if(jQuery.isPlainObject(name)){
    for(const [n, v] of Object.entries(name)){
       applyStyles(n, v);
    }
  } else {
    // Otherwise called with style name and value.
    applyStyles(name, value);
  }
  // This is required for making jQuery plugin calls chainable.
  return $this;
};
// Call the new plugin:
$('#elem').cssImportant('height', '100px');

// Call with an object and camelCased style names:
$('#another').cssImportant({backgroundColor: 'salmon', display: 'block'});

// Call on multiple items:
$('.item, #foo, #bar').cssImportant('color', 'red');

Пример jsfiddle здесь .

mkoryak
источник
1
это ответ. Не нужно проверять другие ответы
Shwet
6

Нам нужно сначала удалить предыдущий стиль. Я удаляю это с помощью регулярного выражения. Вот пример для изменения цвета:

var SetCssColorImportant = function (jDom, color) {
       var style = jDom.attr('style');
       style = style.replace(/color: .* !important;/g, '');
       jDom.css('cssText', 'color: ' + color + ' !important;' + style); }
Родриго Перес Бург
источник
3
Не знаю, почему так много решений взламывают тег стиля на элемент, когда метод cssText работает просто отлично ... например$selector.css('cssText','margin-bottom: 0 !important')
frumbert
6

Альтернативный способ добавить стиль в голову:

$('head').append('<style> #elm{width:150px !important} </style>');

Это добавляет стиль после всех ваших файлов CSS, поэтому он будет иметь более высокий приоритет, чем другие файлы CSS, и будет применяться.

h0mayun
источник
6

Может быть, это выглядит так:

кэш

var node = $ ('. selector') [0];
ИЛИ
var node = document.querySelector ('. selector');

Установить CSS

node.style.setProperty ('ширина', '100px', 'важный');

Удалить CSS

node.style.removeProperty ( 'ширина');
ИЛИ
node.style.width = '';
SerzN1
источник
6

Я думаю, что он работает нормально и может переписать любой другой CSS раньше (это: элемент DOM):

this.setAttribute('style', 'padding:2px !important');
nobjta_9x_tq
источник
5

Делай это так:

$("#elem").get(0).style.width= "100px!important";
user217447
источник
5

Это решение оставит весь вычисленный javascript и добавит важный элемент в элемент: Вы можете сделать это (например, если вам нужно установить ширину с важным тегом)

$('exampleDiv').css('width', '');
//This will remove the width of the item
var styles = $('exampleDiv').attr('style');
//This will contain all styles in your item
//ex: height:auto; display:block;
styles += 'width: 200px !important;'
//This will add the width to the previous styles
//ex: height:auto; display:block; width: 200px !important;
$('exampleDiv').attr('style', styles);
//This will add all previous styles to your item
Себастьян Леандро
источник
4

Три рабочих примера

У меня была похожая ситуация, но я использовал .find () после долгого времени борьбы с .closest () со многими вариантами.

Пример кода

// Allows contain functions to work, ignores case sensitivity

jQuery.expr[':'].contains = function(obj, index, meta, stack) {
    result = false;
    theList = meta[3].split("','");
    var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '')
    for (x=0; x<theList.length; x++) {
        if (contents.toLowerCase().indexOf(theList[x].toLowerCase()) >= 0) {
            return true;
        }
    }
    return false;
};

$(document).ready(function() {
    var refreshId = setInterval( function() {
        $("#out:contains('foo', 'test456')").find(".inner").css('width', '50px', 'important');
    }, 1000); // Rescans every 1000 ms
});

альтернатива

$('.inner').each(function () {
    this.style.setProperty('height', '50px', 'important');
});

$('#out').find('.inner').css({ 'height': '50px'});

Работает: http://jsfiddle.net/fx4mbp6c/

computerguy
источник
Я избавлю вас от лишнего голосования, но вы должны заменить .indexOf()функцию на более кросс-браузерную. Используйте, скорее, .match()или .test()вместо.indexOf()
Александр Диксон
Почему нет точки с запятой в строке с var contents = ?
Питер Мортенсен
3

Это может или не может быть подходящим для вашей ситуации, но вы можете использовать селекторы CSS для многих ситуаций такого типа.

Например, если вы хотите, чтобы 3-й и 6-й экземпляры .cssText имели разную ширину, вы можете написать:

.cssText:nth-of-type(3), .cssText:nth-of-type(6) {width:100px !important;}

Или:

.container:nth-of-type(3).cssText, .container:nth-of-type(6).cssText {width:100px !important;}
Тим Каттинг
источник
Это не соответствует 3-му и 6-му экземплярам .cssText. :nth-of-type()не делает то, что вы думаете, что делает. Смотрите здесь для объяснения.
BoltClock
Справедливо. Я прочитал ссылку, но я не уверен, что понял вашу мысль. Вот скрипка, показывающая, как это работает, как и предполагалось: jsfiddle.net/d2E4b
Тим Каттинг,
2
В вашей скрипке вы имеете дело с рядом liэлементов. Все они имеют один и тот же тип элемента li, с которым имеет дело селектор. Если бы вы смешивали разные элементы в одном и том же родительском элементе, то :nth-of-type()вели бы себя по-разному, особенно когда вы добавляете селектор класса в смесь.
BoltClock
3

Я предполагаю, что вы попробовали это без добавления !important?

Встроенный CSS (именно так JavaScript добавляет стилизацию) переопределяет таблицу стилей CSS. Я уверен, что это так, даже если есть правило CSS таблицы стилей !important.

Другой вопрос (может быть, глупый, но его нужно задать.): Элемент, над которым вы пытаетесь работать, display:block;или display:inline-block;?

Не зная вашего опыта в CSS ... встроенные элементы не всегда ведут себя так, как вы ожидаете.

Дэйв Грегори
источник
4
Правила CSS, которые имеют! Important, переопределяют все, независимо от того, где они расположены, за исключением того, что встроенные стили с! Важным переопределяют стили таблицы стилей с! Важным. Это проблема, с которой я столкнулся. есть правило таблицы стилей с! важным, что я хотел бы переопределить. Более того, значение, которое я должен предоставить, должно быть вычислено через JS, поэтому я не могу просто изменить саму таблицу стилей.
mkoryak
3

Мы можем использовать setProperty или cssText, чтобы добавить !important элемент DOM, используя JavaScript.

Пример 1:

elem.style.setProperty ("color", "green", "important");

Пример 2:

elem.style.cssText='color: red !important;'
ВИШНУ Радхакришнан
источник
2

Я также обнаружил, что некоторые элементы или надстройки (такие как Bootstrap) имеют некоторые особые классы, в которых они не очень хорошо !importantработают или другие обходные пути, такие как.addClass/.removeClass , и, таким образом, вам приходится включать / выключать их.

Например, если вы используете что-то вроде <table class="table-hover">единственного способа успешно изменить элементы, такие как цвета строк, это включить table-hover/ выключить класс, как это

$(your_element).closest("table").toggleClass("table-hover");

Надеюсь, этот обходной путь будет полезен кому-то! :)

Остин
источник
2

У меня была такая же проблема, когда я пытался изменить цвет текста пункта меню, когда "событие". Лучший способ, который я нашел, когда у меня была такая же проблема:

Первый шаг: создайте в своем CSS новый класс с этой целью, например:

.colorw{ color: white !important;}

Последний шаг: примените этот класс, используя метод addClass следующим образом:

$('.menu-item>a').addClass('colorw');

Задача решена.

JoelBonetR
источник
1
Лучший ответ, на мой взгляд. Самый удобный.
Сия
Спасибо @Siyah CSS известен множеству людей, но понимают только немногие, и это печально и заставляет некоторых программистов ненавидеть это, лол
JoelBonetR
Однако, если вы хотите сгенерировать CSS-значение с помощью js, приведите пример значения цвета, определенного в JS. В противном случае это хорошо.
Карл
почему вы хотите определить цвет в js?
JoelBonetR
2

Самый безопасный обходной путь - это добавить класс, а затем сделать магию в CSS :-), addClass()и он removeClass()должен выполнить эту работу.

Райан С
источник
1

https://jsfiddle.net/xk6Ut/256/

Альтернативный подход - динамическое создание и обновление класса CSS в JavaScript. Чтобы сделать это, мы можем использовать элемент style и нам нужно использовать идентификатор для элемента style, чтобы мы могли обновить класс CSS

function writeStyles(styleName, cssText) {
    var styleElement = document.getElementById(styleName);
    if (styleElement) document.getElementsByTagName('head')[0].removeChild(
        styleElement);
    styleElement = document.createElement('style');
    styleElement.type = 'text/css';
    styleElement.id = styleName;
    styleElement.innerHTML = cssText;
    document.getElementsByTagName('head')[0].appendChild(styleElement);
}

...

  var cssText = '.testDIV{ height:' + height + 'px !important; }';
  writeStyles('styles_js', cssText)
Разан Пол
источник