JavaScriptを使用してすべてのインラインスタイルを消去し、CSSスタイルシートで指定されたスタイルのみを残すにはどうすればよいですか?


94

私のhtmlに以下がある場合:

<div style="height:300px; width:300px; background-color:#ffffff;"></div>

そして、これは私のCSSスタイルシートで:

div {
    width:100px;
    height:100px;
    background-color:#000000;
}

javascript / jqueryを使用して、インラインスタイルをすべて削除し、CSSスタイルシートで指定されたスタイルのみを残す方法はありますか?

回答:


166

$('div').attr('style', '');

または

$('div').removeAttr('style');アンドレスの回答から)

これを少し小さくするには、これを試してください:

$('div[style]').removeAttr('style');

divにスタイル属性があることを確認するので、これは少しスピードアップするはずです。

どちらの方法でも、divが大量にある場合、処理に少し時間がかかる可能性があるため、javascript以外のメソッドを検討することをお勧めします。


スタイル属性を削除する必要がある場合は、それも検索する必要があるため、最後の解決策はコードをより汚いだけにするようです。もちろん、IDを使用して、スタイルを削除する必要がある要素のみを選択するのが最善です。
ホセファエティ2011

これはdivのみをターゲットにします。すべてをターゲットにしたい場合はどうなりますか?
2013年

1
関連事項.css()として、2番目の値として空の文字列を指定して呼び出すと、名前付きの値だけがインラインスタイルから削除されます。例:$( 'div')。css( 'display'、 ''); インライン表示プロパティのみが削除されます(設定されている場合)。
トムデイビス

2
@streetlight $('*').removeAttr('style')すべてをターゲティングするために使用します。
真風14

いいえ、実際には2番目の方が少し高速です。JQueryに意味がある場合は、標準のremove属性を使用するためです。また、より多くのDOM要素をループすることによる非効率的なオーバーヘッドが大きいことを忘れているため、2番目の方法が最初の方法よりもさらに高速になっています。

32

プレーンJavaScript:

このような簡単なことをするのにjQueryは必要ありません。.removeAttribute()メソッドを使用するだけです。

単一の要素をターゲットにしていると仮定すると、以下を簡単に使用できます:(例)

document.querySelector('#target').removeAttribute('style');

複数の要素をターゲットにしている場合は、選択した要素のコレクションをループするだけです(例)。

var target = document.querySelectorAll('div');
Array.prototype.forEach.call(target, function(element){
    element.removeAttribute('style');
});

Array.prototype.forEach()-IE9以上/-IE .querySelectorAll()8(部分)IE9以上。


1
に代わるものArray.prototype.forEach.callとして、かなりサポートされているsplat演算子があります[... document.querySelectorAll('div')].forEach(div => div.removeAttribute('style'))

22
$('div').removeAttr('style');

これはattr( 'style'、 '')よりも効率的ですか?
マット

$( 'div')。attr( 'style'、 ''); <div style = ""> </ div>と$( 'div')。removeAttr( 'style'); <div> </ div>はよりクリーンです
andres descalzo '08

おそらく、それがnull値に設定されていないためですが、いずれにしても、本体のすべてのdivを通過する必要があるため、処理時間が長くなります。
タイラーカーター

はい、それは明らかです。ID$( "#id")またはクラス$( ".classDivs)に変更する必要があります
andres descalzo

3

私はこの$('div').attr('style', '');テクニックを使用していて、IE8では機能していませんでした。

を使用alert()してスタイル属性を出力しましたが、インラインスタイルが取り除かれていませんでした。

.removeAttr 結局、IE8でトリックを行うことになりました。


3

style要素のthe を空にするだけの場合:
element.style.cssText = null;
これで十分です。それが役に立てば幸い!


同様のロジックは、要素のための「空」にしようとした場合にのみ、単一のスタイルプロパティを適用するようだ:element.style.display = null;-私は必要なものだと:D
ビラルAkil

1

これは、次の2つのステップで実行できます。

1:タグ名、ID、クラスなどのいずれかで、変更する要素を選択します。

var element = document.getElementsByTagName('h2')[0];

  1. スタイル属性を削除する

element.removeAttribute('style');


-2

また、スタイルシートにCSSを!importantとしてリストすることもできます。


3
これは機能しますが、インラインスタイルを!importantでオーバーライドして削除するのはひどい習慣です
joshvermaire
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.