通过javascript删除html元素样式


90

我正在尝试替换元素的内联样式标签值。当前元素如下所示:

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

并且我想删除所有这些样式内容,以便按类而不是内联样式对其进行样式设置。我试过删除element.style; 和element.style = null; 和element.style =“”; 无济于事。我当前的代码在这些语句处中断。整个函数如下所示:
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");
}

clearInterval可以工作,但是警报永远不会触发,并且背景保持不变。有人看到任何问题吗?提前致谢...


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

尝试了removeAttribute(“ style”),仍然没有运气。我正在使用setInterval在背景色之间循环,以(尝试)创建脉冲效果。我将尝试编写其他一些样式类来尝试回答4.还有其他想法吗?我当前的代码发布在下面...
danwoods

如果您接受这个会很棒作为对这个问题的正确答案,
caramba

^但是,这不是正确的答案。
Evan Hendler

Answers:


182

您可以这样做:

element.removeAttribute("style")

51
element.style.cssText = null,功能大致相同。
mrec

3
@mrec并不完全相同,在您的情况下,元素仍然具有空style属性
用户

5
这回答了OP的问题-删除所有内联样式并回退到样式表规则,但是...这也炸毁了所有内联样式。如果要有选择地从内联样式中删除规则,则下面@sergio的答案(实际上是davidjb对该答案的评论)更为有用。
ericsoco

71

在JavaScript中:

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

在jQuery中:

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

15
代码的第一行似乎是Internet Explorer(<9)中的错误,Invalid argument或导致元素在IE> = 9中完全消失。设置getElementById("id").style.display = ''为空字符串,似乎可以在浏览器中使用。
davidjb

2
在jQuery中删除样式的正确方法是$("#id").css('display', '');
Oiva Eskola

这使我离我很近,但是它不是null,而是“ none”起作用了,例如$("#id").css('display','none');
Aaron

2
display:与该问题或答案无关。那是为了隐藏元素。
JasonWoof

1
还有CSSStyleDeclaration.removeProperty()一个恕我直言,比空分配要干净得多。请参阅developer.mozilla.org/zh-CN/docs/Web/API/CSSStyleDeclaration/…–
Sjeiti的

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

如果您使用的是jQuery,则

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

4
这两段代码片段所做的事情截然不同。只有第一个与这个问题有关。
JasonWoof

5

class属性可以包含多种样式,因此您可以将其指定为

<tr class="row-even highlight">

并进行字符串操作以从element.className中删除“突出显示”

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

使用jQuery会使方法更简单,因为您拥有方法

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

这将使您轻松切换突出显示


在样式表中定义.highlight的另一个好处是,您只需更改一行CSS而根本不更改任何Javascript,就可以精确地更改“ highlight”的显示方式。如果您使用JQuery,添加和删除类仍然非常简单:/ * on * / theElement.className + ='highlight'; / * off * / theElement.className = theElement.className.replace(/ \ b \ s * highlight \ b /,''); (通过在CSS中定义.element,它也会自动在所有地方保持相同。)
Chuck Kollars 2014年

糟糕,被遗忘的可能性等级被指定了多次。要处理这种情况,也可以在正则表达式中添加'g'标志:theElement.className = theElement.className.replace(/ \ / b \ s * highlight \ b / g,'');
2014年

使用classlist节点属性代替className
Shishir Arora

4

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

对于本机JavaScript


2

在jQuery中,您可以使用

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

1

完全删除样式,不仅设置为NULL

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

0

删除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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.