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

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

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

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

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


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



1

Całkowicie usuwam styl, nie tylko ustawiony na NULL

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

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>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.