usuwanie stylów elementów html za pomocą javascript

91

Próbuję zastąpić wartość tagu stylu wbudowanego elementu. Bieżący element wygląda następująco:

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

i chciałbym usunąć wszystkie te elementy stylu, aby był stylizowany na podstawie swojej klasy, a nie stylu wbudowanego. Próbowałem usunąć element.style; i element.style = null; i element.style = ""; bezskutecznie. Mój obecny kod psuje się w tej instrukcji. Cała funkcja wygląda następująco:
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");
}

funkcja clearInterval działa, ale alert nigdy nie jest uruchamiany, a tło pozostaje takie samo. Czy ktoś widzi jakieś problemy? Z góry dziękuję...


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
źródło
Próbowałem removeAttribute („style”), nadal nie udało się. Używam setInterval do przełączania kolorów tła, aby (spróbować) stworzyć efekt pulsu. Spróbuję napisać kilka innych klas stylu, aby spróbować odpowiedzieć 4. Masz inne pomysły? Mój aktualny kod jest zamieszczony poniżej ...
danwoods
byłoby wspaniale, gdybyś zaakceptował to jako poprawną odpowiedź na to pytanie
caramba.
^ Nie jest to jednak właściwa odpowiedź.
Evan Hendler

Odpowiedzi:

183

możesz po prostu zrobić:

element.removeAttribute("style")
chmurka
źródło
51
Lub element.style.cssText = null, która robi to samo.
mrec
4
@mrec nie jest dokładnie to samo, w twoim przypadku element nadal ma pusty styleatrybut
użytkownik
5
Odpowiada to na pytanie OP - usuń cały styl wbudowany i powrót do reguł arkusza stylów, ale ... to również zdmuchuje wszystkie style wbudowane. Jeśli chcesz selektywnie usunąć reguły ze stylów wbudowanych, odpowiedź @ sergio poniżej (właściwie komentarz davidjba do tej odpowiedzi) jest bardziej przydatna.
ericsoco
72

W JavaScript:

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

W jQuery:

$("#id").css('display',null);
Sergio
źródło
15
Wydaje się, że w pierwszym wierszu kodu występuje błąd w przeglądarce Internet Explorer (<9) z Invalid argumentlub całkowite zniknięcie elementu w IE> = 9. Ustawienie getElementById("id").style.display = '', będące pustym ciągiem, wydaje się działać w różnych przeglądarkach.
davidjb
2
w jQuery poprawnym sposobem usunięcia stylu jest$("#id").css('display', '');
Oiva Eskola
To zbliżyło mnie do siebie, ale nie było zerowe, ale „żadne” nie zadziałało, np.$("#id").css('display','none');
Aaron
2
wyświetlacz: żaden nie ma nic wspólnego z tym pytaniem lub odpowiedzią. To do ukrywania elementów.
JasonWoof
1
Jest też to, CSSStyleDeclaration.removeProperty()które imho jest dużo czystsze niż przypisanie zerowe. Zobacz developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/…
Sjeiti
12
getElementById("id").removeAttribute("style");

jeśli używasz jQuery to

$("#id").removeClass("classname");
Rony
źródło
4
Te dwa fragmenty kodu robią bardzo różne rzeczy. Tylko pierwszy ma coś wspólnego z pytaniem.
JasonWoof
5

Atrybut class może zawierać wiele stylów, więc możesz określić go jako

<tr class="row-even highlight">

i wykonaj operację na ciągach znaków, aby usunąć „wyróżnienie” z elementu nazwa_klasy

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

Użycie jQuery uprościłoby to, ponieważ masz metody

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

które umożliwiłyby łatwe przełączanie podświetlania

gapple
źródło
Kolejną zaletą definiowania .highlight w arkuszu stylów jest to, że możesz dokładnie zmienić sposób wyświetlania „podświetlenia”, zmieniając tylko jedną linię CSS i nie wprowadzając żadnych zmian w JavaScript. Jeśli nie używasz JQuery, dodawanie i usuwanie klasy jest nadal dość proste: / * on * / theElement.className + = 'highlight'; / * off * / theElement.className = theElement.className.replace (/ \ b \ s * highlight \ b /, ''); (Definiując .element w CSS, automatycznie pozostaje on wszędzie taki sam .)
Chuck Kollars
Ups, zapomniałem klasy możliwości podano więcej niż raz. Aby obsłużyć ten przypadek, dodaj flagę „g” do wyrażenia regularnego: theElement.className = theElement.className.replace (/ \ / b \ s * highlight \ b / g, '');
Chuck Kollars
użyj właściwości węzła classlist zamiast className
Shishir Arora
4

Posługiwać się

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

Dla natywnego javascript

Shishir Arora
źródło
2

W jQuery możesz użyć

$(".className").attr("style","");
Almhar
źródło
1

Całkowicie usuwam styl, nie tylko ustawiony na NULL

document.getElementById("id").removeAttribute("style")
Vitalicus
źródło
0

Usuń 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>

ßãlãjî
źródło