2009-06-24 12 views
47

Ich versuche, einen Inline-Stil-Tag-Wert eines Elements zu ersetzen. Das aktuelle Element sieht wie folgt aus:Entfernen von HTML-Element-Stilen über Javascript

`<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 diesen Stil Zeug entfernen, so dass es von seiner Klasse gestylt ist, anstatt es Inline-Stil ist. Ich habe versucht, element.style zu löschen; und element.style = null; und element.style = ""; umsonst. Mein aktueller Code bricht bei dieser Aussage ab. Die gesamte Funktion wie folgt aussieht:
Funktion 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"); 
} 

die clearInterval funktioniert, aber der Alarm nie ausgelöst und der Hintergrund bleibt gleich. Wer sieht irgendwelche Probleme? Vielen Dank 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"); 
} 
+0

Versuchte removeAttribute ("style"), noch kein Glück. Ich verwende setInterval, um durch Hintergrundfarben zu wechseln (versuche), einen Pulseffekt 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

+0

es wäre genial, wenn Sie [diese] (http://stackoverflow.com/a/1040439/2008111) als die richtige Antwort auf diese Frage akzeptieren würden – caramba

+0

^Es ist nicht die richtige Antwort obwohl. –

Antwort

106

Sie können einfach tun: element.removeAttribute("style")

+3

elegant zu den MAX – sidonaldson

+26

Oder 'element.style.cssText = null', die das gleiche tut. – mrec

+1

@mrec nicht genau das gleiche, in Ihrem Fall ein Element hat immer noch leere 'style' Attribut – user

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

wenn Sie jQuery dann

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

Diese beiden Code-Schnipsel machen wild verschiedene Dinge. Nur der erste hat etwas mit der Frage zu tun. – JasonWoof

+0

@JasonWoof Ich stimme zu. –

4

Das Klassenattribut verwenden, können mehrere Arten enthalten, So können Sie es als

angeben
<tr class="row-even highlight"> 

und String-Manipulation tun entfernen 'Highlight' von element.className

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

jQuery verwenden würde diese einfacher machen, wie Sie die Methoden haben

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

, die Sie ermöglichen würde, um leicht zu markieren

+0

Ein weiterer Vorteil der Definition von .highlight in Ihrem Stylesheet ist, dass Sie genau ändern können, wie ein "Highlight" angezeigt wird, indem Sie nur eine CSS-Zeile ändern und überhaupt keine Javascript-Änderungen 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 * markieren \ b /, ''); (Durch die Definition von .element in CSS bleibt es automatisch auch immer _same_.) –

+0

Hoppla, vergessen Möglichkeitsklasse ist 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, ''); –

+0

Klassenlistenknoteneigenschaft anstelle von Klassenname verwenden –

44

In JavaScript:

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

In jQuery:

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

Die erste Codezeile erscheint im Internet Explorer (<9) mit' 'entweder als Fehler Ungültiges Argument'' oder bewirken, dass das Element in IE> = 9 vollständig verschwindet. Die Einstellung "getElementById" ("id"). Style.display = '' '', die leere Zeichenfolge, scheint über Browser hinweg zu funktionieren. – davidjb

+2

in jQuery ist der richtige Weg, um einen Stil zu entfernen $ '(" # id "). Css ('display', '');' –

+0

Das brachte mich nahe, aber es war nicht null, aber 'none', die funktionierte , z.B '$ (" # id "). css ('display', 'none');' – Aaron

1

Verwenden

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

für native Javascript

Verwandte Themen