Entfernen von HTML-Elementstilen über Javascript

90

Ich versuche, den Inline-Style-Tag-Wert eines Elements zu ersetzen. Das aktuelle Element sieht folgendermaßen aus:

`<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">`

und ich möchte all diese Stilelemente entfernen, damit sie eher nach Klasse als nach Inline-Stil gestaltet sind. Ich habe versucht, element.style zu löschen. und element.style = null; und element.style = ""; umsonst. Mein aktueller Code bricht bei dieser Anweisung ab. Die ganze Funktion sieht folgendermaßen aus:
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");
}

Das clearInterval funktioniert, aber der Alarm wird nie ausgelöst und der Hintergrund bleibt gleich. Hat jemand irgendwelche Probleme gesehen? Danke im Voraus...


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");
}
Danwoods
quelle
Versucht removeAttribute ("style"), immer noch kein Glück. Ich verwende setInterval, um durch Hintergrundfarben zu blättern und einen Impulseffekt zu erzeugen. Ich werde versuchen, einige andere Stilklassen zu schreiben, um Antwort 4 zu versuchen. Irgendwelche anderen Ideen? Mein aktueller Code ist unten veröffentlicht ...
danwoods
Es wäre fantastisch, wenn Sie dies als die richtige Antwort auf diese Frage akzeptieren würden
Caramba
^ Es ist jedoch nicht die richtige Antwort.
Evan Hendler

Antworten:

181

Sie können einfach tun:

element.removeAttribute("style")
Wolkenkopf
quelle
51
Oder element.style.cssText = nullwas ähnlich ist.
mrec
3
@mrec nicht genau das gleiche, in Ihrem Fall hat ein Element noch leeres styleAttribut
Benutzer
5
Dies beantwortet die Frage des OP: Entfernen Sie alle Inline-Stile und greifen Sie auf Stylesheet-Regeln zurück, aber ... es werden auch alle Inline-Stile weggeblasen. Wenn Sie Regeln selektiv aus den Inline-Stilen entfernen möchten, ist die Antwort von @ sergio unten (eigentlich der Kommentar von davidjb zu dieser Antwort) nützlicher.
Ericsoco
71

In JavaScript:

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

In jQuery:

$("#id").css('display',null);
Sergio
quelle
15
Die erste Codezeile scheint entweder in Internet Explorer (<9) einen Fehler zu Invalid argumentverursachen oder dazu zu führen, dass das Element in IE> = 9 vollständig verschwindet. Die Einstellung getElementById("id").style.display = ''als leere Zeichenfolge scheint in allen Browsern zu funktionieren.
Davidjb
2
in jQuery ist der richtige Weg, um einen Stil zu entfernen,$("#id").css('display', '');
Oiva Eskola
Das brachte mich in die Nähe, aber es war nicht null, aber 'keine', die funktionierte, zB$("#id").css('display','none');
Aaron
2
Anzeige: Keine hat nichts mit dieser Frage oder Antwort zu tun. Das ist zum Verstecken von Elementen.
JasonWoof
1
Es gibt auch, CSSStyleDeclaration.removeProperty()was imho viel sauberer ist als eine Nullzuweisung. Siehe developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/…
Sjeiti
13
getElementById("id").removeAttribute("style");

Wenn Sie jQuery verwenden, dann

$("#id").removeClass("classname");
Rony
quelle
4
Diese beiden Codefragmente machen völlig unterschiedliche Dinge. Nur der erste hat etwas mit der Frage zu tun.
JasonWoof
5

Das Klassenattribut kann mehrere Stile enthalten, sodass Sie es als angeben können

<tr class="row-even highlight">

Führen Sie eine Zeichenfolgenmanipulation durch, um "Hervorhebung" aus element.className zu entfernen

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

Die Verwendung von jQuery würde dies vereinfachen, da Sie über die Methoden verfügen

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

Dadurch können Sie die Hervorhebung einfach umschalten

gapple
quelle
Ein weiterer Vorteil der Definition von .highlight in Ihrem Stylesheet besteht darin, dass Sie genau ändern können, wie ein "Highlight" angezeigt wird, indem Sie nur eine Zeile CSS ändern und überhaupt keine Änderungen an Javascript vornehmen. Wenn Sie JQuery nicht verwenden, ist das Hinzufügen und Entfernen einer Klasse immer noch recht einfach: / * on * / theElement.className + = 'Highlight'; / * off * / theElement.className = theElement.className.replace (/ \ b \ s * Highlight \ b /, ''); (Durch die Definition .Element in CSS, bleibt es automatisch die gleichen überall, auch.)
Chuck Kollars
Ups, vergessene Möglichkeitsklasse wird mehr als einmal angegeben. Um auch diesen Fall zu behandeln, fügen Sie dem regulären Ausdruck das Flag 'g' hinzu: theElement.className = theElement.className.replace (/ \ / b \ s * Highlight \ b / g, '');
Chuck Kollars
Verwenden Sie die Eigenschaft classlist node anstelle von className
Shishir Arora
4

Verwenden

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

Für natives Javascript

Shishir Arora
quelle
2

In jQuery können Sie verwenden

$(".className").attr("style","");
Almhar
quelle
1

Stil vollständig entfernen, nicht nur auf NULL setzen

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