2009-06-24 6 views
47

Sto tentando di sostituire il valore di un tag di stile in linea di un elemento. L'elemento corrente si presenta così:rimozione di stili di elementi html tramite 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">` 

e mi piacerebbe per rimuovere tutta quella roba stile in modo che sia designato da esso di classe piuttosto che si tratta di stile in linea. Ho provato a cancellare element.style; e element.style = null; and element.style = ""; inutilmente. Il mio codice attuale si rompe a queste affermazioni. L'intera funzione è simile:
funzione unSetHighlight (indice) {

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'allarme non si attiva mai e lo sfondo rimane lo stesso. Qualcuno vede qualche problema? 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"); 
} 
+0

provato removeAttribute ("stile"), ancora senza fortuna. Sto usando setInterval per scorrere i colori di sfondo per (provare a) creare un effetto pulsato. Proverò a scrivere alcune altre classi di stile per provare la risposta 4. Altre idee? Il mio codice attuale è pubblicato sotto ... – danwoods

+0

sarebbe fantastico se tu accettassi [questo] (http://stackoverflow.com/a/1040439/2008111) come risposta corretta a questa domanda – caramba

+0

^Non è la risposta giusta , anche se. –

risposta

106

solo si può fare: element.removeAttribute("style")

+3

elegante al MAX – sidonaldson

+26

Oppure 'element.style.cssText = null', che fa lo stesso. – mrec

+1

@mrec non è esattamente lo stesso, nel tuo caso un elemento ha ancora l'attributo 'style' vuoto – user

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

se si utilizza jQuery quindi

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

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

+0

@JasonWoof Sono d'accordo. –

4

L'attributo class può contenere più stili, in modo da poterlo specificare come

<tr class="row-even highlight"> 

e fare la manipolazione di stringhe per rimuovere 'highlight' dal element.className

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

utilizzando jQuery renderebbe questo più semplice quando si dispone di metodi

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

che permetterà per attivare facilmente l'evidenziazione

+0

Un altro vantaggio di definire .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 di Javascript. Se non stai _non_ usando JQuery, aggiungere e rimuovere una classe è ancora piuttosto semplice:/* su */theElement.className + = 'evidenziare';/* off */theElement.className = theElement.className.replace (/ \ b \ s * highlight \ b /, ''); (Definendo .element in CSS, rimane automaticamente anche lo _same_ ovunque.) –

+0

Oops, la classe di probabilità dimenticata viene specificata più di una volta. Per gestire anche questo caso, aggiungi il flag 'g' all'espressione regolare: theElement.className = theElement.className.replace (/ \/b \ s * evidenzia \ b/g, ''); –

+0

usa la proprietà del nodo classlist invece di className –

44

In JavaScript:

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

In jQuery:

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

La prima riga di codice appare in entrambi gli errori in Internet Explorer (<9) con' ' Argomento non valido 'o l'elemento scompare completamente in IE> = 9. 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', '');' –

+0

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

1

Usa

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

JavaScript nativo