Como aplicar! Important usando .css ()?

735

Estou tendo problemas para aplicar um estilo que seja !important. Eu tentei:

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

Isso não faz nada ; nenhum estilo de largura é aplicado. Existe uma maneira jQuery-ish de aplicar esse estilo sem precisar sobrescrever cssText(o que significaria que eu precisaria analisá-lo primeiro etc.)?

Editar : devo acrescentar que tenho uma folha de estilo com um !importantestilo que estou tentando substituir por um !importantestilo embutido, portanto, o uso .width()e similares não funcionam, pois são substituídos pelo meu !importantestilo externo .

Além disso, o valor que substituirá o valor anterior é calculado , portanto não posso simplesmente criar outro estilo externo.

mkoryak
fonte
Vale notar que isso realmente funciona no Chrome (pelo menos para mim), mas não no Firefox.
Peter Jaric
Isso também funciona para mim no Chrome 17.xe Safari 5.1.1, mas não no FF 8.0.
DavidJ
Não funciona para mim no Chromium 20.0.x usando o JQuery 1.8.2.
Alba Mendez
7
O bug do jQuery # 11173 tratava da correção .csse !importantno núcleo do jQuery. O bug foi fechado como "não será corrigido". No entanto, o caso de teste desse bug não era tão restritivo quanto o desta pergunta - o caso de teste não tinha um !importantestilo embutido que estava tentando substituir. Portanto, a solução proposta nesse bug não funcionará neste caso.
Rory O'Kane
2
Possível duplicata de Overriding! Importante com css ou jquery - Embora este seja mais antigo e com mais votos, o outro obteve a resposta mais clara e valiosa.
Jason C

Respostas:

603

O problema é causado pelo jQuery não entender o !importantatributo e, como tal, falha ao aplicar a regra.

Você pode solucionar esse problema e aplicar a regra consultando-a através de addClass():

.importantRule { width: 100px !important; }

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

Ou usando attr():

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

A última abordagem desabilitaria as regras de estilo em linha definidas anteriormente. Portanto, use com cuidado.

Claro, há um bom argumento de que o método de @Nick Craver é mais fácil / mais sábio.

A attr()abordagem acima foi modificada levemente para preservar a stylecadeia / propriedades originais e modificada conforme sugerido por falko em um comentário:

$('#elem').attr('style', function(i,s) { return (s || '') + 'width: 100px !important;' });
David diz para restabelecer Monica
fonte
2
Estou inclinado em direção a sua última abordagem, mas o que é triste sobre isso é que doente, provavelmente, acabar por ter de analisar o cssText anterior, porque eu não posso simplesmente descartá-lo
mkoryak
1
ah, desculpe não poderia obtê-lo, às vezes humor Inglês vai além da minha compreensão ... :)
Sinan
1
O que há com as aspas aninhadas ('"width: 100px! Important"')? Isso não funcionou para mim, mas quando removi as aspas internas, funcionou. Obrigado!
Peter Jaric 18/10/11
15
correção pequena quando o estilo está vazio: $ ('# elem'). attr ('estilo', função (i, s) {return (s || '') + 'width: 100px! important;'});
Falko
4
Você deve adicionar a correção do @ falko, pois no Firefox o seu último snippet definirá o estilo para 'undefinedwidth: 100px !important;'quando o estilo atual estiver vazio.
acdcjunior
332

Eu acho que encontrei uma solução real. Eu fiz isso em uma nova função:

jQuery.style(name, value, priority);

Você pode usá-lo para obter valores .style('name')como .css('name'), obter CSSStyleDeclaration .style()e também definir valores - com a capacidade de especificar a prioridade como 'importante'. Veja isso .

Demo

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'));

Aqui está a saída:

null
red
blue
important

A função

(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);

Veja isso para exemplos de como ler e definir os valores CSS. Meu problema foi que eu já havia definido !importanta largura do meu CSS para evitar conflitos com outro tema do CSS, mas quaisquer alterações feitas na largura do jQuery não seriam afetadas, pois seriam adicionadas ao atributo style.

Compatibilidade

Para definir com prioridade usando a setPropertyfunção, este artigo diz que há suporte para o IE 9+ e todos os outros navegadores. Eu tentei com o IE 8 e ele falhou, e é por isso que criei suporte para ele em minhas funções (veja acima). Ele funcionará em todos os outros navegadores usando setProperty, mas precisará do meu código personalizado para funcionar no <IE 9.

Aram Kocharyan
fonte
você testou isso em outros navegadores?
mkoryak
2
Há também o plugin jQuery.important que foi publicado há alguns anos. Eu estou usando-o em produção com apenas uma questão menor (ver o seu guia Issues.
colllin
14
$ ('.someclass') .each (function () {this.style.setProperty ('borda', 'nenhum', 'importante');}); stackoverflow.com/questions/11962962/… Mais simples, mais limpo e mais eficiente.
3
A única boa maneira de lidar com isso é usar classes, não injeção direta de estilo.
Richard
3
@ Richard, a única maneira de lidar com isso é não usar !importantem seus estilos, pelo menos para as coisas que você vai mudar com o jQuery ... Desde que sejam seus estilos. Se o seu código for executado em uma página codificada por um aluno que resolve sua ignorância sobre as regras de especificidade, aplicando !importantcada segundo estilo, você começará a entrar em um desses !importantsitens mais cedo ou mais tarde.
Septagram
149

Você pode definir a largura diretamente usando o .width()seguinte:

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

Atualizado para comentários: você também tem essa opção, mas ela substituirá todos os css no elemento, portanto, não tenha certeza se é mais viável:

$('#elem').css('cssText', 'width: 100px !important');
Nick Craver
fonte
ok, eu usei como exemplo, o que me interessa é definir! importante.
mkoryak
1
Também editei a pergunta para refletir melhor minha situação .. Basicamente, tenho uma largura externa importante que é definida como algo ruim que devo substituir em linha. width () não funciona por esta razão
mkoryak
@mkoryak - Atualizado com a única outra opção que não seja de classe, não tenho certeza se isso se encaixa na sua situação ou não.
Nick Craver
1
Mas substituirá qualquer outro estilo aplicado diretamente ao elemento. stackoverflow.com/a/11723492/491044 é o mais fácil de implementar.
trgraglia
10
Prevenir substitui por $('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');concat-lo com o valor anterior
Abel Callejo
81
const elem = $("#elem");
elem[0].style.removeAttribute('width');
elem[0].style.setProperty('width', '100px', 'important');

Nota: O uso do Chrome pode retornar um erro como:

elem [0] .style.removeAttribute não é uma função

Alterando a linha para usar a .removePropertyfunção, como para elem[0].style.removeProperty('width');corrigir o problema.

BettaSplendens
fonte
10
Esta é uma das melhores respostas. Simples e funciona. E isso não requer muita explicação. É apenas JavaScript comum, exceto pelo seletor jQuery. O jQuery não fornece suporte para "importante", portanto, o uso regular de JS é o caminho a seguir #
OMA
2
Se você quiser usar o Vanilla, basta criar var = document.getElementById('elem');e executar os métodos de estilo no elem (ao contrário de elem [0]). Felicidades.
Humbolight
3
No JS baunilha, removeAttribute não funciona. Faça o seguinte. var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
Mcoenca
2
Também teve problemas com .removeAttribute. Parece ser um método apenas para o IE . O comentário do @mcoenca está certo; .removePropertyfunciona bem. É IE9 + de acordo com o MSDN
FelipeAls
2
@Dejan, desculpe pela resposta muito tarde, mas isso deve funcionar:elem.next().get(0).style...
RedClover
54

A resposta de David Thomas descreve uma maneira de usar $('#elem').attr('style', …), mas alerta que o uso excluirá estilos definidos anteriormente no styleatributo. Aqui está uma maneira de usar attr()sem esse problema:

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

Como uma função:

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

Aqui está uma demonstração do JS Bin .

Rory O'Kane
fonte
2
addStyleAttribute()também pode ser modificado para obter os mesmos parâmetros que os do jQuery.css() . Por exemplo, ele poderia suportar o mapeamento de propriedades CSS para seus valores. Se você fizesse isso, basicamente seria reimplementado .css()com o !importantbug corrigido, mas sem nenhuma otimização.
Rory O'Kane
1
Isso funcionou bem para mim, pois a largura foi definida em uma classe CSS e eu precisei substituí-la dinamicamente por um valor calculado com base na largura da janela e do conteúdo do navegador.
Chris Rasco 18/02
30

Depois de ler outras respostas e experimentar, é isso que funciona para mim:

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

Isso não funciona no IE 8 e abaixo, no entanto.

Nate
fonte
1
e como ainda precisamos dar suporte ao IE8 (alguns de nós, os azarados) - isso não é bom.
Mkoryak
27

Você consegue fazer isso:

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

Usando "cssText" como o nome da propriedade e o que você deseja adicionar ao CSS como seu valor.

hawkeye126
fonte
5
a desvantagem desta situação é que ele irá substituir o que quer que cssTextestava lá antes - para que você não pode realmente usá-lo livremente
mkoryak
1
de qualquer maneira, você pode usar $ ("# elem"). css ("cssText", "+ =; width: 100px! important;");
lexa-b
18

Você pode conseguir isso de duas maneiras:

$("#elem").prop("style", "width: 100px !important"); // this is not supported in chrome
$("#elem").attr("style", "width: 100px !important");
kva
fonte
Na verdade, a .prop()função foi adicionada no jQuery v1.6 e funcionará no Chrome ... isso é citado na página prop: Antes do jQuery 1.6, o .attr()método às vezes considerava os valores das propriedades ao recuperar alguns atributos, o que poderia causar um comportamento inconsistente. A partir do jQuery 1.6, o .prop()método fornece uma maneira de recuperar explicitamente os valores das propriedades, enquanto .attr()recupera atributos.
Mottie
1
Não é uma boa idéia para uma solução genérica. Você pode substituir seu estilo existente usando isso.
Nirav Zaveri
14

Não há necessidade de ir para a complexidade da resposta do @ AramKocharyan, nem a necessidade de inserir tags de estilo dinamicamente.

Basta substituir o estilo, mas você não precisa analisar nada, por que faria?

// 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' : '') + ';');
}

Não é possível usar removeProperty(), porque não removerá !importantregras no Chrome.
Não é possível usar element.style[property] = '', porque ele aceita apenas camelCase no Firefox.

Você provavelmente poderia diminuir isso com o jQuery, mas essa função básica será executada em navegadores modernos, no Internet Explorer 8, etc.

Hashbrown
fonte
12

Aqui está o que eu fiz depois de encontrar esse problema ...

var origStyleContent = jQuery('#logo-example').attr('style');
jQuery('#logo-example').attr('style', origStyleContent + ';width:150px !important');
kebyang
fonte
Obrigado, isso é muito mais simples de implementar do que um plug-in personalizado (mesmo que potencialmente destrua outros estilos em linha).
Phrogz
9

Esta solução não substitui nenhum dos estilos anteriores, apenas aplica o que você precisa:

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);
}
Alain Beauvois
fonte
9

Se não for tão relevante, e como você está lidando com um elemento que é #elem, você pode alterar o ID dele para outra coisa e estilizá-lo como desejar ...

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

E no seu CSS:

#cheaterId { width: 100px;}
Sinan
fonte
9
por que você altera o id para aplicar um css em vez de apenas adicionar uma classe css?
TeKapa
8

Em vez de usar a css()função, tente a addClass()função:

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

  <style>
  .exampleClass{
    width:100% !important;
    height:100% !important;
  }
  </style>
user3778043
fonte
O OP escreveu que o valor da propriedade é calculado dinamicamente, para que sua resposta não funcione para ele.
Sebastian Zartner
Esta solução funcionou para mim. Eu não acho que tenho as necessidades exatas do pôster original, mas funciona onde css () não.
Leekei
2
Esta é realmente uma solução perfeitamente razoável para um problema ... mas não esse problema!
Mkoryak
8

A melhor e mais fácil solução para esse problema foi usar addClass () em vez de .css () ou .attr ().

Por exemplo:

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

E no seu arquivo CSS:

.importantClass {
    width: 100px !important;
}
Jack Fairfield
fonte
1
Como a largura é calculada em JavaScript, isso não resolve o problema.
6286 Chris
7

A maioria dessas respostas agora está desatualizada, o suporte ao IE7 não é um problema.

A melhor maneira de fazer isso que suporta o IE11 + e todos os navegadores modernos é:

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

Ou, se desejar, você pode criar um pequeno plugin jQuery que faz isso. Este plug-in corresponde ao css()método do jQuery nos parâmetros que ele suporta:

/**
 * 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');

Exemplo de jsfiddle aqui .

mkoryak
fonte
1
essa é a resposta Não há necessidade de procurar outras respostas
Shwet 23/04
6

Primeiro precisamos remover o estilo anterior. Eu o removo usando uma expressão regular. Aqui está um exemplo para mudar de cor:

var SetCssColorImportant = function (jDom, color) {
       var style = jDom.attr('style');
       style = style.replace(/color: .* !important;/g, '');
       jDom.css('cssText', 'color: ' + color + ' !important;' + style); }
Rodrigo Perez Burgues
fonte
3
Não sei por que tantas soluções cortar uma marca de estilo para o elemento quando o método cssText funciona muito bem ... por exemplo$selector.css('cssText','margin-bottom: 0 !important')
frumbert
6

Uma maneira alternativa de acrescentar estilo na cabeça:

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

Isso acrescenta estilo a todos os seus arquivos CSS, para que ele tenha maior prioridade que outros arquivos CSS e seja aplicado.

h0mayun
fonte
6

Pode ser assim:

Cache

var node = $ ('. seletor') [0];
OU
var node = document.querySelector ('. seletor');

Definir CSS

node.style.setProperty ('width', '100px', 'important');

Remover CSS

node.style.removeProperty ('width');
OU
node.style.width = '';
SerzN1
fonte
6

Eu acho que funciona bem e pode substituir qualquer outro CSS antes (este: elemento DOM):

this.setAttribute('style', 'padding:2px !important');
nobjta_9x_tq
fonte
5

Faça isso deste modo:

$("#elem").get(0).style.width= "100px!important";
user217447
fonte
5

Esta solução deixará todo o javascript calculado e adicionará a tag importante ao elemento: Você pode fazer (Ex, se precisar definir a largura com a tag importante)

$('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
Sebastian Leandro
fonte
4

Três exemplos de trabalho

Eu tive uma situação semelhante, mas usei .find () depois de lutar com .closest () por um longo tempo com muitas variações.

O código de exemplo

// 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
});

Alternativa

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

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

Trabalho: http://jsfiddle.net/fx4mbp6c/

computerguy
fonte
Eu vou lhe poupar um voto negativo, mas você deve optar por substituir a .indexOf()função por algo que seja mais compatível com vários navegadores. Use, em vez disso, .match()ou em .test()vez de.indexOf()
Alexander Dixon
Por que nenhum ponto e vírgula na linha com var contents = ?
Peter Mortensen
3

Pode ou não ser apropriado para sua situação, mas você pode usar seletores CSS para muitos desses tipos de situações.

Se, por exemplo, você deseja que a 3ª e a 6ª instâncias do .cssText tenham uma largura diferente, você pode escrever:

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

Ou:

.container:nth-of-type(3).cssText, .container:nth-of-type(6).cssText {width:100px !important;}
Tim Cutting
fonte
Isso não corresponde à 3ª e 6ª instâncias de .cssText. :nth-of-type()não faz o que você pensa que faz. Veja aqui uma explicação.
BoltClock
Justo. Eu li o link, mas não tenho certeza se entendi o seu ponto. Aqui está um violino mostrando isso funcionando como pretendido: jsfiddle.net/d2E4b
Tim Cutting
2
No seu violino, você está lidando com uma série de lielementos. Eles são todos do mesmo tipo de elemento li, com o qual o seletor lida. Se você misturasse elementos diferentes no mesmo pai, :nth-of-type()teria um comportamento diferente, especialmente quando você adicionasse um seletor de classe ao mix.
BoltClock
3

Eu diria que você tentou sem adicionar !important?

CSS embutido (que é como o JavaScript adiciona estilo) substitui o CSS da folha de estilo. Tenho certeza de que é esse o caso, mesmo quando a regra CSS da folha de estilo tem !important.

Outra pergunta (talvez uma pergunta estúpida, mas deve ser feita.): É o elemento em que você está tentando trabalhar display:block;ou display:inline-block;?

Não conhecendo sua experiência em CSS ... os elementos embutidos nem sempre se comportam como você esperaria.

Dave Gregory
fonte
4
As regras css que possuem! importante substituem tudo, não importa onde estejam, apenas uma exceção: estilos inline com! Esse é o problema que estou tendo. existe uma regra de folha de estilo com! importante que eu gostaria de substituir. além do mais, o valor que eu preciso fornecer deve ser calculado através do JS, então não posso simplesmente alterar a folha de estilo.
precisa saber é o seguinte
3

Podemos usar setProperty ou cssText para adicionar !importanta um elemento DOM usando JavaScript.

Exemplo 1:

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

Exemplo 2:

elem.style.cssText='color: red !important;'
VISHNU Radhakrishnan
fonte
2

Também descobri que certos elementos ou complementos (como o Bootstrap) têm alguns casos especiais de classe em que eles não funcionam bem !importantou outras soluções alternativas .addClass/.removeClass, e, portanto, é necessário ativá-los / desativá-los.

Por exemplo, se você usar algo como <table class="table-hover">a única maneira de modificar com êxito elementos como cores de linhas é ativar table-hover/ desativar a classe, desta forma

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

Espero que essa solução alternativa seja útil para alguém! :)

Austin
fonte
2

Eu tive o mesmo problema ao tentar alterar a cor do texto de um item de menu quando "evento". A melhor maneira que encontrei quando tive esse mesmo problema foi:

Primeira etapa: crie, em seu CSS, uma nova classe com esse objetivo, por exemplo:

.colorw{ color: white !important;}

Última etapa: aplique esta classe usando o método addClass da seguinte maneira:

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

Problema resolvido.

JoelBonetR
fonte
1
Melhor resposta, na minha opinião. Mais conveniente.
Siyah
Graças @Siyah CSS é conhecido por um monte de ppl mas entendida apenas por poucos e isso é triste e faz alguns programadores a odiá-lo lol
JoelBonetR
No entanto, se você deseja gerar valor CSS com os js, por exemplo, o valor da cor definido em JS. Caso contrário, isso é bom.
Carl Papworth
por que você deseja definir uma cor em js?
JoelBonetR
2

A solução mais segura para isso é adicionar uma classe e fazer a mágica em CSS :-), addClass()e removeClass()deve fazer o trabalho.

Ryan S
fonte
1

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

Uma abordagem alternativa é criar e atualizar dinamicamente a classe CSS em JavaScript. Para fazer isso, podemos usar o elemento style e precisamos empregar o ID para o elemento style, para que possamos atualizar a classe 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)
Razan Paul
fonte