Come applicare! Important usando .css ()?


735

Ho problemi ad applicare uno stile !important. Ho provato:

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

Questo non fa nulla ; non viene applicato alcun tipo di larghezza. Esiste un modo jQuery di applicare un tale stile senza doverlo sovrascrivere cssText(il che significherebbe che prima dovrei analizzarlo, ecc.)?

Modifica : dovrei aggiungere che ho un foglio di stile con uno !importantstile che sto cercando di sovrascrivere con uno !importantstile in linea, quindi usare .width()e simili non funziona poiché viene sovrascritto dal mio !importantstile esterno .

Inoltre, viene calcolato il valore che sovrascriverà il valore precedente , quindi non posso semplicemente creare un altro stile esterno.


Vale la pena notare che in realtà funziona in Chrome (almeno per me), ma non in Firefox.
Peter Jaric,

Questo funziona anche per me in Chrome 17.xe Safari 5.1.1, ma non in FF 8.0.
DavidJ,

Non funziona per me su Chromium 20.0.x usando JQuery 1.8.2.
Alba Mendez,

7
Il bug # 11173 di jQuery riguardava la correzione .csse !importantnel core jQuery. Il bug è stato chiuso come "non risolverà". Tuttavia, il test case di quel bug non era così restrittivo come quello in questa domanda - il test case non aveva uno !importantstile inline che stava cercando di scavalcare. Pertanto, la soluzione proposta in quel bug non funzionerà in questo caso.
Rory O'Kane,

2
Possibile duplicato di Override! Importante con css o jquery - Mentre questo è più vecchio e più votato, l'altro ha la risposta più chiara e preziosa.
Jason C,

Risposte:


603

Il problema è causato dal fatto che jQuery non comprende l' !importantattributo e pertanto non applica la regola.

Potresti essere in grado di aggirare il problema e applicare la regola facendo riferimento ad esso tramite addClass():

.importantRule { width: 100px !important; }

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

O usando attr():

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

Tuttavia, quest'ultimo approccio annullerebbe qualsiasi regola di stile in linea precedentemente impostata. Quindi usa con cura.

Naturalmente, c'è una buona argomentazione secondo cui il metodo di @Nick Craver è più semplice / più saggio.

Quanto sopra, l' attr()approccio è stato leggermente modificato per preservare la stylestringa / proprietà originale e modificato come suggerito da Falko in un commento:

$('#elem').attr('style', function(i,s) { return (s || '') + 'width: 100px !important;' });

2
mi sto inclinando verso il tuo ultimo approccio, ma la cosa triste è che probabilmente quel malato finirà per dover analizzare il precedente cssText perché non posso semplicemente scartarlo
mkoryak

1
ah, scusa non riuscivo a capirlo, a volte l'umorismo inglese va oltre la mia comprensione ... :)
Sinan,

1
Cosa c'è tra le virgolette nidificate ('"larghezza: 100px! Importante"')? Non ha funzionato per me, ma quando ho rimosso le virgolette interne ha funzionato. Grazie!
Peter Jaric,

15
piccola correzione quando lo stile è vuoto: $ ('# elem'). attr ('style', function (i, s) {return (s || '') + 'width: 100px! important;'});
falko,

4
Dovresti aggiungere la correzione di @falko, poiché in Firefox il tuo ultimo frammento imposterà lo stile su 'undefinedwidth: 100px !important;'quando lo stile corrente è vuoto.
acdcjunior

332

Penso di aver trovato una vera soluzione. L'ho trasformato in una nuova funzione:

jQuery.style(name, value, priority);

Puoi usarlo per ottenere valori .style('name')proprio come .css('name'), ottenere CSSStyleDeclaration .style()e anche impostare valori - con la possibilità di specificare la priorità come 'importante'. Vedere questo .

dimostrazione

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

Ecco l'output:

null
red
blue
important

La funzione

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

Vedi questo per esempi su come leggere e impostare i valori CSS. Il mio problema era che avevo già impostato !importantla larghezza nel mio CSS per evitare conflitti con altri temi CSS, ma qualsiasi modifica apportata alla larghezza in jQuery non sarebbe stata influenzata poiché sarebbero stati aggiunti all'attributo style.

Compatibilità

Per l'impostazione con la priorità utilizzando la setPropertyfunzione, questo articolo afferma che esiste il supporto per IE 9+ e tutti gli altri browser. Ho provato con IE 8 e non ha funzionato, motivo per cui ho sviluppato il supporto nelle mie funzioni (vedi sopra). Funzionerà su tutti gli altri browser usando setProperty, ma avrà bisogno del mio codice personalizzato per funzionare in <IE 9.


hai provato questo su altri browser?
mkoryak,

2
C'è anche il plugin jQuery.important che è stato pubblicato un paio di anni fa. Lo sto usando in produzione con un solo problema minore (vedere la scheda Problemi.
Colllin

14
$ ('.someclass') .each (function () {this.style.setProperty ('border', 'none', 'important');}); stackoverflow.com/questions/11962962/… Più semplice, più pulito ed efficiente.

3
L'unico buon modo per affrontare questo è usare le classi, non l'iniezione diretta di stile.
Richard,

3
@Richard, l'unico buon modo per affrontarlo non è usare !importantnei tuoi stili, almeno per le cose che cambierai con jQuery ... Finché sono i tuoi stili. Se il tuo codice viene eseguito all'interno di una pagina codificata da uno studente che aggira la sua ignoranza delle regole di specificità dando uno schiaffo !importantsu ogni secondo stile, !importantsprima o poi entrerai in uno di questi .
Settagramma

149

Puoi impostare la larghezza direttamente usando in .width()questo modo:

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

Aggiornato per i commenti: hai anche questa opzione, ma sostituirà tutti i CSS sull'elemento, quindi non sei sicuro che sia più praticabile:

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

ok, ho usato come esempio, quello che mi interessa è l'impostazione! importante.
mkoryak,

1
inoltre ho modificato la domanda per riflettere meglio la mia situazione .. fondamentalmente ho una larghezza esterna! importante che è impostata su qualcosa di brutto che devo ignorare in linea. larghezza () non funziona per questo motivo
mkoryak

@mkoryak - Aggiornato con l'unica altra opzione non di classe, non sono sicuro che si adatti alla tua situazione o meno.
Nick Craver

1
Ma sostituirà qualsiasi altro stile applicato direttamente all'elemento. stackoverflow.com/a/11723492/491044 è il più semplice da implementare.
trgraglia,

10
impedire le sostituzioni $('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');concaturalo con il valore precedente
Abel Callejo

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

Nota: l'utilizzo di Chrome potrebbe restituire un errore come:

elem [0] .style.removeAttribute non è una funzione

Modifica della riga per utilizzare la .removePropertyfunzione in modo da elem[0].style.removeProperty('width');risolvere il problema.


10
Questa è una delle migliori risposte. Semplice e funziona. E non richiede molte spiegazioni. È solo JavaScript normale, ad eccezione del selettore jQuery. jQuery non fornisce supporto per "importanti", quindi utilizzare JS regolari è la strada da percorrere
OMA

2
Se vuoi andare con Vanilla con esso, crea var = document.getElementById('elem');ed esegui i metodi di stile su elem (al contrario di elem [0]). Saluti.
humbolight,

3
In Vanilla JS, removeAttribute non funziona. Fare quanto segue. var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
mcoenca,

2
Ha anche avuto problemi con .removeAttribute. Sembra essere un metodo solo IE . Il commento di @mcoenca è giusto; .removePropertyfunziona bene. È IE9 + secondo MSDN
FelipeAls

2
@Djan, scusa per la risposta molto tardi, ma questo dovrebbe funzionare:elem.next().get(0).style...
RedClover

54

La risposta di David Thomas descrive un modo di usare $('#elem').attr('style', …), ma avverte che il suo utilizzo eliminerà gli stili precedentemente impostati stylenell'attributo. Ecco un modo di usare attr()senza quel problema:

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

Come una funzione:

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

Ecco una demo di JS Bin .


2
addStyleAttribute()potrebbe anche essere modificato per accettare gli stessi parametri di jQuery.css() . Ad esempio, potrebbe supportare l'acquisizione di una mappa delle proprietà CSS sui loro valori. Se lo facessi, ti rifaresti fondamentalmente .css()con il !importantbug corretto ma senza alcuna ottimizzazione.
Rory O'Kane,

1
Questo ha funzionato bene per me poiché la larghezza è stata definita in una classe CSS e ho dovuto sostituirla dinamicamente con un valore calcolato in base alla larghezza della finestra del browser e al contenuto.
Chris Rasco,

30

Dopo aver letto altre risposte e sperimentato, questo è ciò che funziona per me:

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

Tuttavia, questo non funziona in IE 8 e precedenti.


1
e poiché dobbiamo ancora supportare IE8 (alcuni di noi, gli sfortunati) - questo non va bene.
mkoryak,

27

Puoi farlo:

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

Usando "cssText" come nome della proprietà e qualunque cosa tu voglia aggiungere al CSS come valore.


5
il rovescio della medaglia di questo è che sovrascriverà tutto ciò che cssTextc'era prima - quindi non puoi davvero usarlo liberamente
mkoryak

1
puoi comunque usare $ ("# elem"). css ("cssText", "+ =; larghezza: 100px! important;");
lexa-b,

18

Puoi farlo in due modi:

$("#elem").prop("style", "width: 100px !important"); // this is not supported in chrome
$("#elem").attr("style", "width: 100px !important");

In realtà, la .prop()funzione è stata aggiunta in jQuery v1.6 e funzionerà in Chrome ... questo è citato dalla pagina prop: Prima di jQuery 1.6, il .attr()metodo a volte prendeva in considerazione i valori delle proprietà durante il recupero di alcuni attributi, che potrebbero causare comportamenti incoerenti. A partire da jQuery 1.6, il .prop()metodo fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr()recupera gli attributi.
Mottie,

1
Non è una buona idea per una soluzione generica. Puoi ignorare il tuo stile esistente usando questo.
Nirav Zaveri,

14

Non è necessario andare alla complessità della risposta di @ AramKocharyan, né alla necessità di inserire dinamicamente tag di stile.

Basta sovrascrivere lo stile, ma non è necessario analizzare nulla, perché dovresti?

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

Impossibile utilizzare removeProperty()perché non rimuoverà le !importantregole in Chrome.
Impossibile utilizzare element.style[property] = '', perché accetta solo camelCase in Firefox.

Probabilmente potresti accorciarlo con jQuery, ma questa funzione vanilla verrà eseguita su browser moderni, Internet Explorer 8, ecc.


12

Ecco cosa ho fatto dopo aver riscontrato questo problema ...

var origStyleContent = jQuery('#logo-example').attr('style');
jQuery('#logo-example').attr('style', origStyleContent + ';width:150px !important');

Grazie, questo è molto più semplice da implementare rispetto a un plug-in personalizzato (anche se potenzialmente distrugge altri stili in linea).
Phrogz,

9

Questa soluzione non sostituisce nessuno degli stili precedenti, applica solo quello di cui hai bisogno:

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

Se non è così rilevante e poiché hai a che fare con un elemento che lo è #elem, puoi cambiare il suo ID in qualcos'altro e modellarlo come desideri ...

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

E nel tuo CSS:

#cheaterId { width: 100px;}

9
perché cambi l'id per applicare un CSS invece di aggiungere semplicemente una classe CSS?
TeKapa,

8

Invece di utilizzare la css()funzione, prova la addClass()funzione:

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

  <style>
  .exampleClass{
    width:100% !important;
    height:100% !important;
  }
  </style>

L'OP ha scritto che il valore della proprietà viene calcolato dinamicamente, quindi la tua risposta non funziona per lui.
Sebastian Zartner,

Questa soluzione ha funzionato per me. Non penso di avere esattamente le esigenze del poster originale, ma funziona dove css () non lo fa.
leekei,

2
Questa è davvero una soluzione perfettamente ragionevole per un problema ... proprio non questo problema!
mkoryak,

8

La soluzione più semplice e migliore per questo problema da parte mia era usare semplicemente addClass () invece di .css () o .attr ().

Per esempio:

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

E nel tuo file CSS:

.importantClass {
    width: 100px !important;
}

1
Poiché la larghezza viene calcolata in JavaScript, questo non risolve il problema.
Chris,


7

La maggior parte di queste risposte è obsoleta, il supporto IE7 non è un problema.

Il modo migliore per fare ciò che supporta IE11 + e tutti i browser moderni è:

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

Oppure, se lo desideri, puoi creare un piccolo plugin jQuery per farlo. Questo plugin si avvicina molto al css()metodo di jQuery nei parametri che supporta:

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

Esempio jsfiddle qui .


1
questa è la risposta Non c'è bisogno di cercare altre risposte
Shwet,

6

Dobbiamo prima rimuovere lo stile precedente. Lo rimuovo usando un'espressione regolare. Ecco un esempio per cambiare colore:

var SetCssColorImportant = function (jDom, color) {
       var style = jDom.attr('style');
       style = style.replace(/color: .* !important;/g, '');
       jDom.css('cssText', 'color: ' + color + ' !important;' + style); }

3
Non so perché così tante soluzioni incidere un tag di stile sull'elemento quando il metodo cssText funziona perfettamente ... ad es.$selector.css('cssText','margin-bottom: 0 !important')
frumbert

6

Un modo alternativo per aggiungere stile alla testa:

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

Questo accoda lo stile dopo tutti i tuoi file CSS, quindi avrà una priorità più alta rispetto agli altri file CSS e verrà applicato.


6

Può essere così:

nascondiglio

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

Imposta CSS

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

Rimuovi CSS

node.style.removeProperty ( 'width');
O
node.style.width = '';

6

Penso che funzioni bene e può sovrascrivere qualsiasi altro CSS prima (questo: elemento DOM):

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


5

Questa soluzione lascerà tutto il javascript calcolato e aggiungerà il tag importante nell'elemento: Puoi farlo (ad esempio se devi impostare la larghezza con il 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

4

Tre esempi di lavoro

Ho avuto una situazione simile, ma ho usato .find () dopo aver lottato con .closest () per lungo tempo con molte varianti.

Il codice di esempio

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

Funzionando: http://jsfiddle.net/fx4mbp6c/


Ti risparmierò un voto negativo ma dovresti scegliere di sostituire la .indexOf()funzione con qualcosa che sia più compatibile con più browser. Usa, piuttosto, .match()o .test()invece di.indexOf()
Alexander Dixon, il

Perché nessun punto e virgola in linea con var contents = ?
Peter Mortensen,

3

Può essere o non essere appropriato per la tua situazione, ma puoi usare i selettori CSS per molte di queste situazioni.

Se, ad esempio, desideri che la 3a e la 6a istanza di .cssText abbiano una larghezza diversa, puoi scrivere:

.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;}

Questo non corrisponde alla 3a e 6a istanza di .cssText. :nth-of-type()non fa quello che pensi che faccia. Vedi qui per una spiegazione.
BoltClock

Giusto. Ho letto il link, ma non sono sicuro di aver capito il tuo punto. Ecco un violino che mostra come funziona: jsfiddle.net/d2E4b
Tim Cutting,

2
Nel tuo violino, hai a che fare con una serie di lielementi. Sono tutti dello stesso tipo di elemento li, che è ciò che il selettore gestisce. Se dovessi mescolare elementi diversi nello stesso genitore, allora ti :nth-of-type()comporteresti diversamente, specialmente una volta aggiunto un selettore di classe nel mix.
BoltClock

3

Suppongo che tu abbia provato senza aggiungere !important?

I CSS incorporati (ovvero JavaScript aggiunge lo stile) sovrascrivono i CSS del foglio di stile. Sono abbastanza sicuro che sia così anche quando ha la regola CSS del foglio di stile !important.

Un'altra domanda (forse una domanda stupida, ma deve essere fatta.): L'elemento su cui stai cercando di lavorare display:block;o display:inline-block;?

Non conoscendo la tua esperienza nei CSS ... gli elementi in linea non si comportano sempre come ti aspetteresti.


4
Le regole CSS che hanno! importante sovrascrivono tutto, indipendentemente da dove si trovano, l'unica eccezione è che gli stili in linea con! important sostituiranno gli stili del foglio di stile con! important. Questo è il problema che sto riscontrando. c'è una regola del foglio di stile con! important che vorrei sovrascrivere. inoltre, il valore che devo fornire deve essere calcolato tramite JS, quindi non posso semplicemente modificare il foglio di stile stesso.
mkoryak,

3

Possiamo usare setProperty o cssText per aggiungere !importanta un elemento DOM usando JavaScript.

Esempio 1:

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

Esempio 2:

elem.style.cssText='color: red !important;'

2

Ho anche scoperto che alcuni elementi o componenti aggiuntivi (come Bootstrap) hanno alcuni casi di classe speciali in cui non giocano bene !importanto altri aggiramenti come .addClass/.removeClass, e quindi devi attivarli / disattivarli.

Ad esempio, se usi qualcosa come <table class="table-hover">l'unico modo per modificare correttamente elementi come i colori delle righe è attivare table-hover/ disattivare la classe, in questo modo

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

Spero che questa soluzione possa essere utile a qualcuno! :)


2

Ho avuto lo stesso problema nel tentativo di cambiare il colore del testo di una voce di menu quando "evento". Il modo migliore che ho trovato quando ho avuto lo stesso problema è stato:

Primo passo: crea, nel tuo CSS, una nuova classe con questo scopo, ad esempio:

.colorw{ color: white !important;}

Ultimo passaggio: applicare questa classe utilizzando il metodo addClass come segue:

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

Problema risolto.


1
La migliore risposta, secondo me. Più conveniente.
Siyah,

Grazie @Siyah CSS è noto per un sacco di ppl ma capito solo per pochi e questo è triste e rende alcuni programmatori di odiarlo lol
JoelBonetR

Non tuttavia se si desidera generare un valore CSS con js, ad esempio il valore di colore definito in JS. Altrimenti è bello.
Carl Papworth,

perché vorresti definire un colore in js?
JoelBonetR,

2

La soluzione più sicura a questo è aggiungere una classe e poi fare la magia in CSS :-), addClass()e removeClass()dovrebbe fare il lavoro.


1

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

Un approccio alternativo è la creazione e l'aggiornamento dinamico della classe CSS in JavaScript. Per fare ciò, possiamo usare l'elemento style e dobbiamo usare l'ID per l'elemento style in modo da poter aggiornare la 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.