removendo estilos de elemento html via javascript

90

Estou tentando substituir o valor da tag de estilo embutido de um elemento. O elemento atual se parece com isto:

`<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 eu gostaria de remover todas essas coisas de estilo para que seja estilizado por sua classe em vez de seu estilo embutido. Eu tentei excluir element.style; e element.style = null; e element.style = ""; para nenhum proveito. Meu código atual quebra com essas declarações. Toda a função se parece com:
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");
}

o clearInterval funciona, mas o alerta nunca dispara e o plano de fundo permanece o mesmo. Alguém viu algum problema? Desde já, obrigado...


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
fonte
Tentei removeAttribute ("estilo"), ainda sem sorte. Estou usando setInterval para percorrer as cores de fundo para (tentar) criar um efeito de pulso. Vou tentar escrever algumas outras classes de estilo para tentar a resposta 4. Alguma outra ideia? Meu código atual está postado abaixo ...
danwoods
seria ótimo se você aceitasse esta como a resposta correta para esta pergunta
caramba
^ Não é a resposta certa, no entanto.
Evan Hendler

Respostas:

182

você pode apenas fazer:

element.removeAttribute("style")
cabeça de nuvem
fonte
51
Ou element.style.cssText = null, que faz quase o mesmo.
MREC
3
@mrec não é exatamente o mesmo, no seu caso, um elemento ainda tem um styleatributo vazio
usuário
5
Isso responde à pergunta do OP - remove todos os estilos embutidos e retorna às regras de folha de estilo, mas ... também elimina todos os estilos embutidos. Se você deseja remover regras seletivamente dos estilos embutidos, a resposta de @ sergio abaixo (na verdade, o comentário de davidjb sobre essa resposta) é mais útil.
ericsoco
71

Em JavaScript:

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

Em jQuery:

$("#id").css('display',null);
Sergio
fonte
15
A primeira linha de código parece apresentar erro no Internet Explorer (<9) com Invalid argumentou fazer com que o elemento desapareça totalmente no IE> = 9. A configuração getElementById("id").style.display = '', sendo a string vazia, parece funcionar em todos os navegadores.
davidjb
2
no jQuery, a maneira correta de remover um estilo é$("#id").css('display', '');
Oiva Eskola
Isso me aproximou, mas não era nulo, mas "nenhum" funcionou, por exemplo$("#id").css('display','none');
Aaron
2
display: none não tem nada a ver com esta pergunta ou resposta. Isso é para esconder elementos.
JasonWoof
1
Há também CSSStyleDeclaration.removeProperty()que imho é muito mais limpo do que uma atribuição nula. Consulte developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/…
Sjeiti
13
getElementById("id").removeAttribute("style");

se você estiver usando jQuery então

$("#id").removeClass("classname");
Rony
fonte
4
Esses dois trechos de código fazem coisas totalmente diferentes. Apenas o primeiro tem algo a ver com a questão.
JasonWoof
5

O atributo class pode conter vários estilos, então você pode especificá-lo como

<tr class="row-even highlight">

e fazer manipulação de string para remover 'destaque' de element.className

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

Usar jQuery tornaria isso mais simples, pois você tem os métodos

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

que permitiria alternar o destaque facilmente

lacuna
fonte
Outra vantagem de definir .highlight em sua folha de estilo é que você pode alterar exatamente como um "destaque" é exibido apenas alterando uma linha de CSS e não fazendo nenhuma alteração de Javascript. Se você não estiver usando JQuery, adicionar e remover uma classe ainda é muito simples: / * on * / theElement.className + = 'highlight'; / * off * / theElement.className = theElement.className.replace (/ \ b \ s * destaque \ b /, ''); (Ao definir .element em CSS, ele também permanece automaticamente o mesmo em todos os lugares.)
Chuck Kollars
Ops, a classe de possibilidade esquecida foi especificada mais de uma vez. Para lidar com esse caso também, adicione o sinalizador 'g' à expressão regular: theElement.className = theElement.className.replace (/ \ / b \ s * destaque \ b / g, '');
Chuck Kollars
use a propriedade do nó da lista de classes em vez de className
Shishir Arora
4

Usar

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

Para javascript nativo

Shishir Arora
fonte
2

Em jQuery, você pode usar

$(".className").attr("style","");
Almhar
fonte
1

Removendo completamente o estilo, não apenas definido como NULL

document.getElementById("id").removeAttribute("style")
Vitalicus
fonte
0

Remover 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î
fonte