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");
}

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

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

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

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


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


2

In jQuery können Sie verwenden

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

1

Stil vollständig entfernen, nicht nur auf NULL setzen

document.getElementById("id").removeAttribute("style")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.