Come posso rimuovere uno stile aggiunto con la funzione .css ()?


868

Sto cambiando CSS con jQuery e desidero rimuovere lo stile che sto aggiungendo in base al valore di input:

if(color != '000000') $("body").css("background-color", color); else // remove style ?

Come posso fare questo?
Si noti che la riga sopra viene visualizzata ogni volta che si seleziona un colore utilizzando un selettore colore (cioè quando il mouse si sposta su una ruota dei colori).

2a nota: non posso farlo css("background-color", "none")perché rimuoverà lo stile predefinito dai file CSS .
Voglio solo rimuovere lo background-colorstile in linea aggiunto da jQuery .



meglio provare addClass / removeClass in base alla tua personalità. Questo non influirà su altri stili.
Prabhakaran,

Risposte:


1333

La modifica della proprietà in una stringa vuota sembra fare il lavoro:

$.css("background-color", "");

4
@baacke È un peccato quando il presunto "standard" è terribilmente obsoleto e perde molto tempo di sviluppo. Ho poca simpatia per le aziende che scelgono di utilizzare software obsoleti, non vedo perché dovrei dedicare del tempo extra per svilupparle.
Andrewb,

33
Devo schierarmi con @baacke qui. Il nostro cliente ha ancora un requisito minimo ufficiale di IE6 (!!). Il problema è che i loro clienti sono in tutto il mondo, compresi i paesi meno sviluppati. I "clienti del cliente" potrebbero utilizzare computer molto vecchi per fare affari con i nostri clienti. Quindi il vecchio browser deve essere almeno minimamente supportato o rischiano di perdere affari ...
user1429080

8
Ragazzi, non riuscite a stabilire i requisiti di nessuna soluzione sviluppata per un cliente. Se quel cliente desidera o ha bisogno di supporto per un browser più vecchio, è il tuo compito di fornirlo, punto. Ragazzi, parlando di "chi se ne frega" date una cattiva fama ai veri ingegneri.
Ed DeGagne,

5
@EdDeGagne - Devi costantemente smettere di supportare versioni precedenti di IE. Ciò migliora la base di codice e motiva i visitatori a non utilizzare un vecchio IE. L'unica cosa difficile è capire quando è possibile eliminare il supporto. I siti Web di Google, con molti visitatori, se hanno deciso di abbandonare un vecchio IE, allora puoi fidarti di loro che è stata una buona decisione. Una società è arrivata persino a dire ai propri utenti che è più vantaggioso acquistare un vecchio computer per ogni vecchio utente IE che mantenere il proprio codice IE (che è esattamente quello che hanno offerto).
janko-m,

5
Ho smesso di leggere quando ho visto "IE8 è ancora lo standard, anche su Windows 7"
Capsule

544

La risposta accettata funziona ma lascia un styleattributo vuoto sul DOM nei miei test. Non è un grosso problema, ma questo rimuove tutto:

removeAttr( 'style' );

Ciò presuppone che si desideri rimuovere tutto lo stile dinamico e tornare allo stile del foglio di stile.


Questa è una bella idea ma buggy in jQuery, vedi il bug inviato: bugs.jquery.com/ticket/9500
Tosh

4
@Tosh Quel bug è stato risolto il 25/08/2011
ThinkingStiff

Lo so, ma almeno nella versione 1.7 è ancora difettoso, non ho ancora testato 1.8
Tosh

7
Ciò rimuoverà anche tutte le altre proprietà nell'attributo style. Quindi scegli saggiamente.
codingrhythm,

1
Questo è intelligente! la risposta accettata non funzionerebbe in situazioni in cui lo stile inline creato da jquery dovrebbe sovrascrivere gli stili CSS, ma questo metodo funziona bene in tutte le situazioni.
Farzad YZ,

170

Esistono diversi modi per rimuovere una proprietà CSS utilizzando jQuery:

1. Impostazione della proprietà CSS sul valore predefinito (iniziale)

.css("background-color", "transparent")

Vedere il valore iniziale per la proprietà CSS su MDN . Qui il valore predefinito è transparent. Puoi anche usare inheritdiverse proprietà CSS per ereditare l'attributo dal suo genitore. In CSS3 / CSS4, puoi anche usare initial, reverto unsetma queste parole chiave potrebbero avere un supporto limitato per il browser.

2. Rimozione della proprietà CSS

Una stringa vuota rimuove la proprietà CSS, ad es

.css("background-color","")

Ma attenzione, come specificato nella documentazione jQuery .css () , questo rimuove la proprietà ma ha problemi di compatibilità con IE8 per alcune proprietà stenografiche CSS, incluso lo sfondo .

Impostando il valore di una proprietà di stile su una stringa vuota, ad esempio $ ('# mydiv'). Css ('color', '') - rimuove quella proprietà da un elemento se è già stata direttamente applicata, sia nello stile HTML attributo, tramite il metodo .css () di jQuery o tramite la manipolazione DOM diretta della proprietà style. Tuttavia, non rimuove uno stile che è stato applicato con una regola CSS in un foglio di stile o in un elemento. Attenzione: un'eccezione notevole è che, per IE 8 e versioni precedenti, la rimozione di una proprietà abbreviata come bordo o sfondo rimuoverà completamente quello stile dall'elemento, indipendentemente da ciò che è impostato in un foglio di stile o elemento .

3. Rimozione dell'intero stile dell'elemento

.removeAttr("style")

49

Ho trovato il modo di rimuovere un attributo di stile con JavaScript puro solo per farti conoscere il modo di JavaScript puro

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');

11
Il ragazzo usa già jQuery ... perché preoccuparsi di reimplementare un metodo cross-browser!?!?
Billy

32
perché jquery non è tutto, perché lei o forse dovrei dire a tutti noi come sviluppatori che dovrebbero sapere cosa significa compatibilità e come fare una cosa del genere con linguaggi di base come JavaScript, forse questa è la mia teoria che ho già creato il mio framework dalla mia conoscenza del core JavaScript mi ​​rifiuto di usare le altre cose, ho il mio concetto e il mio modo di pensare :) e comunque grazie per il tuo (-) dovevo solo essere un valore aggiunto :) e anche dal modo in cui il ragazzo non è un ragazzo, è una donna di nome Alex
Marwan,

1
Voglio solo notare che non dovresti controllare document.all se non lo usi. Forse dovresti verificarlo in questo modo: if (elm.style.removeProperty) {elm.style.removeProperty (propertyName); } else if (elm.style.removeAttribute) {elm.style.removeAttribute (attributoNome); }
Richard

bene hai ragione dovrebbe essere così se (navigator.appName == "Microsoft Internet Explorer") document.body.style.removeAttribute ('background-color'); else document.body.style.removeProperty ('background-color'); e d'altra parte anche la tua soluzione è giusta :) grazie per la tua nota
Marwan

9
No, dovresti assolutamente verificare se esiste quella funzione piuttosto che controllare il browser. Cosa succede se MS decide di cambiare il nome della funzione nella prossima versione di IE? Quindi vai a controllare anche la versione di IE?
j03w,


19

una di queste funzioni jQuery dovrebbe funzionare:

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 

22
Per rimuovere solo una proprietà css:var cssObject = $('selector').prop('style'); cssObject.removeProperty('background-color');
ilgaar

igaar - la tua soluzione è la più pulita. L'ho messo in un ciclo '.each' per un mucchio di celle di tabella che avevano "display: none" che doveva andare ma con altre proprietà che dovevano rimanere. Ha funzionato perfettamente, semplicemente rimuovendo il display: nessuno e lasciando il resto.
Rob Von Nesselrode,

9

Basta usare:

$('.tag-class').removeAttr('style');

o

$('#tag-id').removeAttr('style');

Questo rimuoverà anche altri stili aggiunti in linea, non solo il colore.
LongInt

7

Che ne dici di qualcosa come:

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}

Mi piace questa! Si rimuove la proprietà specificata e nient'altro.
Joel,

7

Usa il mio plugin:

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }

Per il tuo caso, usalo come segue:

$(<mySelector>).removeCss();

o

$(<mySelector>).removeCss(false);

se vuoi rimuovere anche i CSS definiti nelle sue classi:

$(<mySelector>).removeCss(true);

$(this).removeAttrè ridondante e this.removeAttrdovrebbe essere sufficiente.
Emile Bergeron,

Non removeAttr rimuoverà anche classattr? non la penso così
Abdennour TOUMI,

Sto parlando removeAttrall'interno del tuo plugin, dove thisè già un elemento jQuery. $(this)è ridondante.
Emile Bergeron,

2
AH! OK OK .. @EmileBergeron, il vecchio jquery fornisce thiscome HTMLElementistanza mappato all'elemento jQuery ... Come vedi, la mia risposta è vecchia ... ecco perché .. comunque, posso dirti perché lo cambiano, lo fanno a causa della funzione freccia che arriva nuova in ES6. .. e thisdiventa inutile ed è stato sostituito daevent.currentTarget
Abdennour TOUMI il

1
Giusto! ;) Divertente quanti anni ha 3 anni nel mondo JS.
Emile Bergeron,

7

Prova questo:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.

Grazie


L'unico problema con il "rimuovi esistente" è che sostituirà anche lo sfondo del foglio di stile se ce n'è uno.
Jtbs

6

Se usi lo stile CSS, puoi usare:

$("#element").css("background-color","none"); 

e quindi sostituire con:

$("#element").css("background-color", color);

Se non usi lo stile CSS e hai un attributo nell'elemento HTML, puoi usare:

$("#element").attr("style.background-color",color);

6

2018

c'è un'API nativa per questo

element.style.removeProperty(propery)


2

Perché non creare lo stile che desideri rimuovere una classe CSS? Ora è possibile utilizzare: .removeClass(). Ciò apre anche la possibilità di utilizzare:.toggleClass()

(rimuovi la classe se è presente e aggiungila se non lo è.)

L'aggiunta / rimozione di una classe è anche meno confusa per cambiare / risolvere i problemi quando si affrontano i problemi di layout (invece di cercare di capire perché un particolare stile è scomparso.)


2
let el = document.querySelector(element)
let styles = el.getAttribute('style')

el.setAttribute('style', styles.replace('width: 100%', ''))

1

Questo è più complesso di alcune altre soluzioni, ma può offrire una maggiore flessibilità negli scenari:

1) Crea una definizione di classe per isolare (incapsulare) lo stile che desideri applicare / rimuovere selettivamente. Può essere vuoto (e in questo caso, probabilmente dovrebbe essere):

.myColor {}

2) utilizzare questo codice, basato su http://jsfiddle.net/kdp5V/167/ da questa risposta di gilly3 :

function changeCSSRule(styleSelector,property,value) {
    for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
        var ss = document.styleSheets[ssIdx];
        var rules = ss.cssRules || ss.rules;
        if(rules){
            for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
                var rule = rules[ruleIdx];
                if (rule.selectorText == styleSelector) {
                    if(typeof value == 'undefined' || !value){
                        rule.style.removeProperty(property);
                    } else {
                        rule.style.setProperty(property,value);
                    }
                    return; // stops at FIRST occurrence of this styleSelector
                }
            }
        }
    }
}

Esempio di utilizzo: http://jsfiddle.net/qvkwhtow/

Avvertenze:

  • Non ampiamente testato.
  • Non è possibile includere ! Importanti o altre direttive nel nuovo valore. Qualsiasi direttiva esistente verrà persa attraverso questa manipolazione.
  • Cambia solo la prima occorrenza trovata di uno styleSelector. Non aggiunge o rimuove interi stili, ma ciò potrebbe essere fatto con qualcosa di più elaborato.
  • Qualsiasi valore non valido / inutilizzabile verrà ignorato o verrà generato un errore.
  • In Chrome (almeno), le regole CSS non locali (come nel sito) non sono esposte attraverso l'oggetto document.styleSheets, quindi non funzionerà su di esse. Si dovrebbe aggiungere una sostituzione locale e manipolarla, tenendo presente il comportamento "prima trovato" di questo codice.
  • document.styleSheets non è particolarmente amichevole con la manipolazione in generale, non aspettarti che funzioni per un uso aggressivo.

Isolare lo stile in questo modo è ciò di cui tratta CSS, anche se manipolarlo non lo è. Manipolare le regole CSS NON è tutto ciò che riguarda jQuery, jQuery manipola gli elementi DOM e utilizza i selettori CSS per farlo.


1

Semplice è economico nello sviluppo web. Consiglio di usare una stringa vuota quando si rimuove uno stile particolare

$(element).style.attr = '  ';

1

Prova questo

$(".ClassName").css('color','');
Or 
$("#Idname").css('color','');
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.