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

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

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

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

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


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


2

Em jQuery, você pode usar

$(".className").attr("style","");

1

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

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

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>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.