rimuovere gli stili degli elementi html tramite javascript


90

Sto cercando di sostituire il valore del tag di stile in linea di un elemento. L'elemento corrente ha questo aspetto:

`<tr class="row-even" style="background: red none repeat scroll 0% 0%; position: relative; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" id="0000ph2009-06-10s1s02">`

e mi piacerebbe rimuovere tutta quella roba di stile in modo che sia stilato dalla sua classe piuttosto che dal suo stile in linea. Ho provato a eliminare element.style; e element.style = null; e element.style = ""; inutilmente. Il mio codice attuale si interrompe a queste affermazioni. L'intera funzione è simile a:
function unSetHighlight (index) {

if(index < 10)
index = "000" + (index);
else if (index < 100)
  index = "000" + (index);
  else if(index < 1000)
    index = "0" + (index);
    if(index >= 1000)
      index = index;

var mainElm = document.getElementById('active_playlist');
var elmIndex = "";

for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){
  if(currElm.nodeType === 1){

  var elementId = currElm.getAttribute("id");

  if(elementId.match(/\b\d{4}/)){

    elmIndex = elementId.substr(0,4);


    if(elmIndex == index){
      var that = currElm;
      //that.style.background = position: relative;
      }
    }
  }
}

clearInterval(highlight);
alert("cleared Interval");
that.style.background = null;

alert("unSet highlight called");
}

il clearInterval funziona ma l'avviso non si attiva mai e lo sfondo rimane lo stesso. Qualcuno vede problemi? Grazie in anticipo...


function unSetHighlight(index){  
  alert(index);  
  if(index < 10)  
    index = "000" + (index);  
    else if (index < 100)  
      index = "000" + (index);  
      else if(index < 1000)  
        index = "0" + (index);  
        if(index >= 1000)  
          index = index;  

    var mainElm = document.getElementById('active_playlist');
    var elmIndex = "";

    for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){
      if(currElm.nodeType === 1){

      var elementId = currElm.getAttribute("id");

      if(elementId.match(/\b\d{4}/)){

        elmIndex = elementId.substr(0,4);
        alert("elmIndex = " + elmIndex + "index = " + index);


        if(elmIndex === index){
          var that = currElm;
          alert("match found");
          }
        }
      }
    }

    clearInterval(highlight);
    alert("cleared Interval");
    that.removeAttribute("style");

    //that.style.position = "relative";
    //reColor();
    alert("unSet highlight called");
}

Ho provato removeAttribute ("style"), ancora senza fortuna. Sto usando setInterval per scorrere i colori di sfondo per (provare a) creare un effetto a impulsi. Proverò a scrivere altre classi di stile per provare a rispondere 4. Altre idee? Il mio codice attuale è pubblicato di seguito ...
danwoods

sarebbe fantastico se accettassi questa come la risposta corretta a questa domanda
caramba

^ Tuttavia, non è la risposta giusta.
Evan Hendler

Risposte:


182

puoi semplicemente fare:

element.removeAttribute("style")

51
Oppure element.style.cssText = null, che fa più o meno lo stesso.
mrec

3
@mrec non è esattamente lo stesso, nel tuo caso un elemento ha ancora un styleattributo vuoto
utente

5
Questo risponde alla domanda dell'OP: rimuovi tutto lo stile in linea e il fallback alle regole del foglio di stile, ma ... spazza via anche tutti gli stili in linea. Se vuoi rimuovere selettivamente le regole dagli stili inline, la risposta di @ sergio di seguito (in realtà, il commento di davidjb su quella risposta) è più utile.
ericsoco

71

In JavaScript:

document.getElementById("id").style.display = null;

In jQuery:

$("#id").css('display',null);

15
La prima riga di codice sembra un errore in Internet Explorer (<9) con Invalid argumento fa scomparire completamente l'elemento in IE> = 9. L'impostazione getElementById("id").style.display = '', essendo la stringa vuota, sembra funzionare su tutti i browser.
davidjb

2
in jQuery il modo corretto per rimuovere uno stile è$("#id").css('display', '');
Oiva Eskola

Questo mi ha avvicinato, ma non era nullo, ma "nessuno" che ha funzionato, ad esempio$("#id").css('display','none');
Aaron

2
display: nessuno ha nulla a che fare con questa domanda o risposta. È per nascondere gli elementi.
JasonWoof

1
C'è anche CSSStyleDeclaration.removeProperty()che imho è molto più pulito di un'assegnazione nulla. Vedi developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/…
Sjeiti

13
getElementById("id").removeAttribute("style");

se stai usando jQuery allora

$("#id").removeClass("classname");

4
Questi due frammenti di codice fanno cose completamente diverse. Solo il primo ha qualcosa a che fare con la domanda.
JasonWoof

5

L'attributo class può contenere più stili, quindi puoi specificarlo come

<tr class="row-even highlight">

e manipola le stringhe per rimuovere "highlight" da element.className

element.className=element.className.replace('hightlight','');

L'uso di jQuery lo renderebbe più semplice dato che hai i metodi

$("#id").addClass("highlight");
$("#id").removeClass("hightlight");

che ti consentirebbe di attivare / disattivare facilmente l'evidenziazione


Un altro vantaggio della definizione di .highlight nel tuo foglio di stile è che puoi cambiare esattamente il modo in cui un "highlight" viene visualizzato semplicemente cambiando una riga di CSS e non apportando alcuna modifica a Javascript. Se stai non utilizza JQuery, aggiunta e la rimozione di una classe è ancora piuttosto semplice: / * su * / theElement.className + = 'highlight'; / * off * / theElement.className = theElement.className.replace (/ \ b \ s * highlight \ b /, ''); (Definendo .element in CSS, rimane automaticamente lo stesso anche ovunque.)
Chuck Kollars

Oops, la classe di possibilità dimenticata è stata specificata più di una volta. Per gestire anche questo caso, aggiungi il flag 'g' all'espressione regolare: theElement.className = theElement.className.replace (/ \ / b \ s * highlight \ b / g, '');
Chuck Kollars

usa la proprietà del nodo classlist invece di className
Shishir Arora

4

Uso

particular_node.classList.remove("<name-of-class>")

Per javascript nativo


2

In jQuery, puoi usare

$(".className").attr("style","");

1

Rimuove completamente lo stile, non solo impostato su NULL

document.getElementById("id").removeAttribute("style")

0

Rimuovere removeProperty

var el=document.getElementById("id");


el.style.removeProperty('display')

console.log("display removed"+el.style["display"])

console.log("color "+el.style["color"])
<div id="id" style="display:block;color:red">s</div>

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.