¿Cómo aplicar! Important usando .css ()?

735

Tengo problemas para aplicar un estilo que es !important. He intentado:

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

Esto no hace nada ; no se aplica ningún estilo de ancho. ¿Existe una forma jQuery-ish de aplicar dicho estilo sin tener que sobrescribir cssText(lo que significaría que primero debería analizarlo, etc.)?

Editar : debo agregar que tengo una hoja de estilo con un !importantestilo que estoy tratando de anular con un !importantestilo en línea, por lo que usar .width()y similares no funciona, ya que mi !importantestilo externo lo anula .

Además, se calcula el valor que anulará el valor anterior , por lo que no puedo simplemente crear otro estilo externo.

mkoryak
fuente
Vale la pena señalar que esto realmente funciona en Chrome (al menos para mí), pero no en Firefox.
Peter Jaric
Esto también funciona para mí en Chrome 17.xy Safari 5.1.1, pero no en FF 8.0.
DavidJ
No funciona para mí en Chromium 20.0.x con JQuery 1.8.2.
Alba Mendez
77
El error jQuery # 11173 trataba sobre la reparación .cssy !importanten el núcleo jQuery. El error se cerró como "no se solucionará". Sin embargo, el caso de prueba de ese error no era tan restrictivo como el de esta pregunta: el caso de prueba no tenía un !importantestilo en línea que intentaba anular. Por lo tanto, la solución propuesta en ese error no funcionará en este caso.
Rory O'Kane
2
Posible duplicado de Overriding! Importante con css o jquery - Si bien este es más antiguo y tiene más votos, el otro obtuvo la respuesta más clara y valiosa.
Jason C

Respuestas:

603

El problema se debe a que jQuery no comprende el !importantatributo y, como tal, no aplica la regla.

Es posible que pueda solucionar ese problema y aplicar la regla al referirse a él a través de addClass():

.importantRule { width: 100px !important; }

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

O al usar attr():

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

Sin embargo, este último enfoque desarmaría cualquier regla de estilo en línea previamente establecida. Así que úsalo con cuidado.

Por supuesto, hay un buen argumento de que el método de @Nick Craver es más fácil / más sabio.

El attr()enfoque anterior se modificó ligeramente para preservar la stylecadena / propiedades originales y se modificó según lo sugerido por falko en un comentario:

$('#elem').attr('style', function(i,s) { return (s || '') + 'width: 100px !important;' });
David dice que reinstale a Mónica
fuente
2
Me estoy inclinando hacia su último enfoque, pero lo triste es que probablemente termine analizando el cssText anterior porque no puedo descartarlo
mkoryak
1
ah, lo siento, no pude entenderlo, a veces el humor inglés va más allá de mi comprensión ... :)
Sinan
1
¿Qué pasa con las comillas anidadas ('"ancho: 100 px! Importante"')? Eso no funcionó para mí, pero cuando eliminé las comillas internas funcionó. ¡Gracias!
Peter Jaric
15
pequeña corrección cuando el estilo está vacío: $ ('# elem'). attr ('style', function (i, s) {return (s || '') + 'width: 100px! important;'});
falko
44
Debería agregar la corrección de @ falko, ya que en firefox su último fragmento establecerá el estilo 'undefinedwidth: 100px !important;'cuando el estilo actual esté vacío.
acdcjunior
332

Creo que he encontrado una solución real. Lo convertí en una nueva función:

jQuery.style(name, value, priority);

Puede usarlo para obtener valores con .style('name')igual .css('name'), obtener CSSStyleDeclaration con .style(), y también establecer valores, con la capacidad de especificar la prioridad como 'importante'. Mira esto .

Manifestación

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

Aquí está la salida:

null
red
blue
important

La función

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

Consulte esto para ver ejemplos de cómo leer y establecer los valores CSS. Mi problema era que ya había establecido !importantel ancho en mi CSS para evitar conflictos con otro CSS de tema, pero los cambios que hice en el ancho en jQuery no se verían afectados ya que se agregarían al atributo de estilo.

Compatibilidad

Para configurar con la prioridad usando la setPropertyfunción, este artículo dice que hay soporte para IE 9+ y todos los demás navegadores. He intentado con IE 8 y ha fallado, por lo que desarrollé soporte para él en mis funciones (ver arriba). Funcionará en todos los demás navegadores que usan setProperty, pero necesitará mi código personalizado para funcionar en <IE 9.

Aram Kocharyan
fuente
¿Has probado esto en otros navegadores?
mkoryak
2
También está el complemento jQuery.important que se publicó hace un par de años. Lo estoy usando en producción con solo un problema menor (vea su pestaña Problemas.
colllin
14
$ ('.someclass') .each (function () {this.style.setProperty ('border', 'none', 'important');}); stackoverflow.com/questions/11962962/… Más simple, más limpio y más eficiente.
3
La única buena manera de lidiar con esto es usando clases, no inyección directa de estilo.
Richard
3
@ Richard, la única buena manera de lidiar con esto es no usarlo !importanten tus estilos, al menos para las cosas que vas a cambiar con jQuery ... siempre y cuando sean tus estilos. Si su código se ejecuta dentro de una página codificada por un estudiante que trabaja en torno a su ignorancia de las reglas de especificidad al aplicar !importantcada segundo estilo, !importantstarde o temprano se va a meter en uno de estos .
Septagram
149

Puede establecer el ancho directamente usando .width()así:

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

Actualizado para comentarios: también tiene esta opción, pero reemplazará todos los CSS en el elemento, así que no estoy seguro de que sea más viable:

$('#elem').css('cssText', 'width: 100px !important');
Nick Craver
fuente
ok, como ejemplo, lo que me importa es configurar! importante.
mkoryak
1
También edité la pregunta para reflejar mejor mi situación ... ¡básicamente tengo un ancho externo! importante que está configurado en algo malo que debo anular en línea. ancho () no funciona por este motivo
mkoryak
@mkoryak: actualizado con la única otra opción que no es de clase, no estoy seguro de si se ajustará a su situación o no.
Nick Craver
1
Pero anulará cualquier otro estilo directamente aplicado al elemento. stackoverflow.com/a/11723492/491044 es el más fácil de implementar.
Trgraglia
10
evitar anulaciones por $('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');concat con el valor anterior
Abel Callejo
81
const elem = $("#elem");
elem[0].style.removeAttribute('width');
elem[0].style.setProperty('width', '100px', 'important');

Nota: el uso de Chrome puede devolver un error como:

elem [0] .style.removeAttribute no es una función

Cambiar la línea para usar la .removePropertyfunción, como para elem[0].style.removeProperty('width');solucionar el problema.

BettaSplendens
fuente
10
Esta es una de las mejores respuestas. Simple y funciona. Y no requiere mucha explicación. Es solo JavaScript normal, excepto el selector jQuery. jQuery no proporciona soporte para "importante", por lo que usar JS regular es el camino a seguir
OMA
2
Si quieres usar Vanilla con él, solo crea var = document.getElementById('elem');y realiza los métodos de estilo en elem (en lugar de elem [0]). Salud.
Humbolight
3
En vanilla JS, removeAttribute no funciona. Haz lo siguiente. var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
mcoenca
2
También tuve problemas con .removeAttribute. Parece ser un método solo para IE . El comentario de @mcoenca es correcto; .removePropertyfunciona bien. Es IE9 + según MSDN
FelipeAls
2
@Dejan, perdón por una respuesta muy tardía, pero esto debería funcionar:elem.next().get(0).style...
RedClover
54

La respuesta de David Thomas describe una forma de uso $('#elem').attr('style', …), pero advierte que su uso eliminará los estilos previamente establecidos en el styleatributo. Aquí hay una forma de usar attr()sin ese problema:

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

Como una función:

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

Aquí hay una demostración de JS Bin .

Rory O'Kane
fuente
2
addStyleAttribute()también podría modificarse para tomar los mismos parámetros que jQuery's.css() . Por ejemplo, podría soportar llevar un mapa de propiedades CSS a sus valores. Si hiciera eso, básicamente volvería a implementarse .css()con el !importanterror corregido pero sin ninguna optimización.
Rory O'Kane
1
Esto funcionó bien para mí, ya que el ancho se definió en una clase CSS y necesitaba anularlo dinámicamente con un valor calculado en función del ancho de la ventana del navegador y el contenido.
Chris Rasco
30

Después de leer otras respuestas y experimentar, esto es lo que funciona para mí:

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

Sin embargo, esto no funciona en IE 8 y versiones inferiores.

Nate
fuente
1
y dado que todavía tenemos que admitir IE8 (algunos de nosotros, los desafortunados), esto no es bueno.
mkoryak
27

Puedes hacerlo:

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

Usando "cssText" como el nombre de la propiedad y lo que quiera agregar al CSS como su valor.

hawkeye126
fuente
55
La desventaja de esto es que sobrescribirá todo lo que cssTexthaya allí antes, por lo que no puede usarlo libremente
mkoryak
1
de todos modos, puede usar $ ("# elem"). css ("cssText", "+ =; width: 100px! important;");
lexa-b
18

Puede lograr esto de dos maneras:

$("#elem").prop("style", "width: 100px !important"); // this is not supported in chrome
$("#elem").attr("style", "width: 100px !important");
kva
fuente
En realidad, la .prop()función se agregó en jQuery v1.6 y funcionará en Chrome ... esto se cita desde la página de utilería: antes de jQuery 1.6, el .attr()método a veces tenía en cuenta los valores de propiedad al recuperar algunos atributos, lo que podría causar un comportamiento inconsistente. A partir de jQuery 1.6, el .prop()método proporciona una forma de recuperar explícitamente los valores de propiedad, mientras .attr()recupera los atributos.
Mottie
1
No es una muy buena idea para una solución genérica. Puede anular su estilo existente con esto.
Nirav Zaveri
14

No es necesario ir a la complejidad de la respuesta de @ AramKocharyan, ni la necesidad de insertar dinámicamente ninguna etiqueta de estilo.

Simplemente sobrescribe el estilo, pero no tienes que analizar nada, ¿por qué lo harías?

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

No se puede usar removeProperty(), porque no eliminará las !importantreglas en Chrome.
No se puede usar element.style[property] = '', porque solo acepta camelCase en Firefox.

Probablemente podría acortar esto con jQuery, pero esta función vainilla se ejecutará en navegadores modernos, Internet Explorer 8, etc.

Hashbrown
fuente
12

Esto es lo que hice después de encontrar este problema ...

var origStyleContent = jQuery('#logo-example').attr('style');
jQuery('#logo-example').attr('style', origStyleContent + ';width:150px !important');
kebyang
fuente
Gracias, esto es mucho más sencillo de implementar que un complemento personalizado (incluso si potencialmente destruye otros estilos en línea).
Phrogz
9

Esta solución no anula ninguno de los estilos anteriores, solo aplica el que necesita:

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
fuente
9

Si no es tan relevante y ya que se trata de un elemento que lo es #elem, puede cambiar su identificación a otra y darle el estilo que desee ...

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

Y en tu CSS:

#cheaterId { width: 100px;}
Sinan
fuente
99
¿Por qué cambia la identificación para aplicar un CSS en lugar de simplemente agregar una clase CSS?
TeKapa
8

En lugar de usar la css()función, pruebe la addClass()función:

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

  <style>
  .exampleClass{
    width:100% !important;
    height:100% !important;
  }
  </style>
usuario3778043
fuente
El OP escribió que el valor de la propiedad se calcula dinámicamente, por lo que su respuesta no funciona para él.
Sebastian Zartner
Esta solución funcionó para mí. No creo que tenga las necesidades exactas como el póster original, pero funciona donde css () no.
leekei
2
Esta es una solución perfectamente razonable para un problema ... ¡pero no este problema!
mkoryak
8

La mejor y más fácil solución para este problema fue simplemente usar addClass () en lugar de .css () o .attr ().

Por ejemplo:

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

Y en tu archivo CSS:

.importantClass {
    width: 100px !important;
}
Jack Fairfield
fuente
1
Como el ancho se calcula en JavaScript, esto no resuelve el problema.
Chris
7

La mayoría de estas respuestas ahora están desactualizadas, el soporte de IE7 no es un problema.

La mejor manera de hacer esto que sea compatible con IE11 + y todos los navegadores modernos es:

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

O si lo desea, puede crear un pequeño complemento jQuery que haga esto. Este complemento coincide estrechamente con el css()método propio de jQuery en los parámetros que admite:

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

Ejemplo jsfiddle aquí .

mkoryak
fuente
1
esta es la respuesta. No es necesario buscar otras respuestas
Shwet
6

Primero necesitamos eliminar el estilo anterior. Lo elimino usando una expresión regular. Aquí hay un ejemplo para cambiar de color:

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
fuente
3
No sé por qué tantas soluciones piratean una etiqueta de estilo en el elemento cuando el método cssText funciona bien ... por ejemplo$selector.css('cssText','margin-bottom: 0 !important')
frumbert
6

Una forma alternativa de agregar estilo en la cabeza:

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

Esto agrega estilo después de todos sus archivos CSS, por lo que tendrá mayor prioridad que otros archivos CSS y se aplicará.

h0mayun
fuente
6

Puede ser que se vea así:

Cache

nodo var = $ ('. selector') [0];
O
var nodo = document.querySelector ('. selector');

Establecer CSS

node.style.setProperty ('ancho', '100px', 'importante');

Eliminar CSS

node.style.removeProperty ('ancho');
O
node.style.width = '';
SerzN1
fuente
6

Creo que funciona bien y puede sobrescribir cualquier otro CSS antes (esto: elemento DOM):

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

Hazlo asi:

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

Esta solución dejará todos los javascript calculados y agregará la etiqueta importante al elemento: puede hacerlo (Ej. Si necesita establecer el ancho con la etiqueta 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
fuente
4

Tres ejemplos de trabajo

Tuve una situación similar, pero usé .find () después de luchar con .closest () durante mucho tiempo con muchas variaciones.

El código de ejemplo

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

Trabajo: http://jsfiddle.net/fx4mbp6c/

computerguy
fuente
Le ahorraré un voto negativo, pero debería optar por reemplazar la .indexOf()función con algo que sea más compatible con todos los navegadores. Uso, más bien, .match()o en .test()lugar de.indexOf()
Alexander Dixon
¿Por qué no hay punto y coma en la línea con var contents = ?
Peter Mortensen
3

Puede o no ser apropiado para su situación, pero puede utilizar selectores CSS para muchos de estos tipos de situaciones.

Si, por ejemplo, desea que las instancias tercera y sexta de .cssText tengan un ancho diferente, puede escribir:

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

O:

.container:nth-of-type(3).cssText, .container:nth-of-type(6).cssText {width:100px !important;}
Corte de tim
fuente
Esto no coincide con la tercera y sexta instancia de .cssText. :nth-of-type()no hace lo que crees que hace. Ver aquí para una explicación.
BoltClock
Lo suficientemente justo. Leí el enlace, pero no estoy seguro de haber entendido su punto. Aquí hay un violín que muestra que esto funciona según lo previsto: jsfiddle.net/d2E4b
Tim Cutting
2
En tu violín, estás lidiando con una serie de lielementos. Todos son del mismo tipo de elemento li, que es de lo que trata el selector. Si mezclara diferentes elementos en el mismo padre, entonces :nth-of-type()se comportaría de manera diferente, especialmente una vez que agregue un selector de clase a la mezcla.
BoltClock
3

Supongo que lo intentaste sin agregar !important?

CSS en línea (que es cómo JavaScript agrega estilo) anula la hoja de estilo CSS. Estoy bastante seguro de que ese es el caso incluso cuando la regla CSS de la hoja de estilo tiene !important.

Otra pregunta (quizás una pregunta estúpida, pero debe hacerse): ¿Es el elemento en el que está tratando de trabajar display:block;o display:inline-block;?

Sin conocer su experiencia en CSS ... los elementos en línea no siempre se comportan como cabría esperar.

Dave Gregory
fuente
44
Las reglas CSS que tienen! Importante anulan todo, sin importar dónde se encuentren, con la única excepción de que los estilos en línea con! Importante anularán los estilos de hoja de estilo con! Importante. Este es el problema que estoy teniendo. hay una regla de hoja de estilo con! importante que me gustaría anular. Además, el valor que necesito proporcionar debe calcularse a través de JS, por lo que simplemente no puedo cambiar la hoja de estilo en sí.
mkoryak
3

Podemos usar setProperty o cssText para agregar !important a un elemento DOM usando JavaScript.

Ejemplo 1:

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

Ejemplo 2

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

También descubrí que ciertos elementos o complementos (como Bootstrap) tienen algunos casos de clase especiales en los que no funcionan bien !importantu otras soluciones como.addClass/.removeClass , por lo que debe / desactivarlos.

Por ejemplo, si usa algo como <table class="table-hover">la única forma de modificar con éxito elementos como los colores de las filas es activar table-hover/ desactivar la clase, de esta manera

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

¡Esperemos que esta solución sea útil para alguien! :)

Austin
fuente
2

Tuve el mismo problema al tratar de cambiar el color del texto de un elemento de menú cuando "evento". La mejor manera que encontré cuando tuve este mismo problema fue:

Primer paso: Cree, en su CSS, una nueva clase con este propósito, por ejemplo:

.colorw{ color: white !important;}

Último paso: aplique esta clase utilizando el método addClass de la siguiente manera:

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

Problema resuelto.

JoelBonetR
fuente
1
La mejor respuesta, en mi opinión. El más conveniente.
Siyah
Gracias @Siyah CSS es conocido por un montón de personas pero se entiende solo para unos pocos y esto es triste y hace que algunos programadores lo odien jajaja
JoelBonetR
No obstante, si desea generar un valor CSS con js, por ejemplo, el valor de color definido en JS. De lo contrario, esto es bueno.
Carl Papworth el
¿por qué quieres definir un color en js?
JoelBonetR
2

La solución más segura para esto es agregar una clase y luego hacer la magia en CSS :-), addClass()y removeClass()debería hacer el trabajo.

Ryan S
fuente
1

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

Un enfoque alternativo es crear y actualizar dinámicamente la clase CSS en JavaScript. Para hacer eso, podemos usar el elemento de estilo y necesitamos emplear la ID para el elemento de estilo para que podamos actualizar la clase 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
fuente