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 2009年

あなたがこれを受け入れるならそれは素晴らしいでしょうこの質問に対する正しい答えとして
caramba

^しかし、それは正しい答えではありません。
エヴァンヘンドラー2017年

回答:


182

あなたはただ行うことができます:

element.removeAttribute("style")

51
またはelement.style.cssText = null、ほとんど同じことを行います。
mrec 14年

3
@mrecは完全に同じではありません。あなたの場合、要素にはまだ空のstyle属性があります
ユーザー

5
これはOPの質問に答えます-インラインスタイルをすべて削除し、スタイルシートルールにフォールバックしますが、すべてのインラインスタイルを吹き飛ばします。インラインスタイルから選択的にルールを削除する場合は、以下の@sergioの回答(実際には、その回答に関するdavidjbのコメント)の方が便利です。
ericsoco 2015年

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 2015年

2
jQueryでスタイルを削除する正しい方法は次の$("#id").css('display', '');
とおり

これは、近くに私を得たが、それはnullではありませんでしたが、例えば働いていた「何もしない」、$("#id").css('display','none');
アーロン

2
display:noneは、この質問または回答とは関係ありません。これは要素を非表示にするためのものです。
JasonWoof 2017

1
CSSStyleDeclaration.removeProperty()null割り当てよりもはるかにクリーンなimho もあります。developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/…を
Sjeiti

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

jQueryを使用している場合

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

4
これら2つのコードスニペットは、まったく異なる動作をします。最初のものだけが問題と関係があります。
JasonWoof 2017

5

class属性には複数のスタイルを含めることができるため、次のように指定できます

<tr class="row-even highlight">

element.classNameから 'highlight'を削除するために文字列操作を行います

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

メソッドがあるため、jQueryを使用すると、これがより簡単になります

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

強調表示を簡単に切り替えることができます


スタイルシートで.highlightを定義するもう1つの利点は、CSSの1行を変更するだけでJavaScriptをまったく変更しないことで、「ハイライト」の表示方法を正確に変更できることです。JQueryを使用していない場合でも、クラスの追加と削除は非常に簡単です。/ * on * / theElement.className + = 'highlight'; / * off * / theElement.className = theElement.className.replace(/ \ b \ s * highlight \ b /、 ''); (CSSで.elementを定義すると、どこでも自動的に同じままになります。)
Chuck Kollars

おっと、可能性を忘れたクラスが複数回指定されています。その場合も処理するには、正規表現に「g」フラグを追加します。theElement.className = theElement.className.replace(/ \ / b \ s * highlight \ b / g、 '');
チャックコラーズ2014年

classNameの代わりにclasslistノードプロパティを使用する
Shishir Arora

4

使用する

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

ネイティブJavaScriptの場合



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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.