.css()関数で追加されたスタイルを削除するにはどうすればよいですか?


868

jQueryを使用してCSSを変更し、入力値に基づいて追加しているスタイルを削除したいと思います。

if(color != '000000') $("body").css("background-color", color); else // remove style ?

これどうやってするの?
上記の線は、カラーピッカーを使用して色が選択されるたびに(つまり、マウスがカラーホイールの上に移動したときに)実行されることに注意してください。

2番目の注意:CSSファイルcss("background-color", "none")からデフォルトのスタイルが削除されるため、これを行うことはできません。jQueryによって追加され たインラインスタイルを削除したいだけです。
background-color



機能に基づいてaddClass / removeClassを試してみてください。これは他のスタイリングには影響しません。
Prabhakaran 2017

回答:


1333

プロパティを空の文字列に変更すると、次のようになります。

$.css("background-color", "");

4
@baacke想定される「標準」がひどく古く、開発時間を多く浪費しているのは残念です。時代遅れのソフトウェアを使用することを選択した企業に同情することはほとんどありません。なぜそれらのために開発するために余分な時間を費やす必要があるのか​​わかりません。
andrewb 2014

33
私はここで@baackeを支持しなければなりません。お客様には、IE6(!!)の公式の最小要件がまだあります。問題は、顧客が開発途上国を含めて世界中にあることです。「顧客の顧客」は、非常に古いコンピュータを使用して顧客と取引している可能性があります。したがって、古いブラウザは最低限サポートされている必要があります。そうでない場合、ビジネスを失うリスクがあります...
user1429080

8
クライアントのために開発するソリューションの要件を設定することはできません。そのクライアントが古いブラウザのサポートを望んでいる、または必要としている場合、それを提供するのはあなたの仕事です。「誰が気にするか」について話している皆さんは、真のエンジニアに悪い名前を付けています。
Ed DeGagne

5
@EdDeGagne-古いバージョンのIEのサポートを常に停止する必要があります。これにより、コードベースが改善され、訪問者が古いIEを使用しないようになります。唯一の難しいことは、いつサポートをドロップできるかを理解することです。多くの訪問者がいるグーグルのウェブサイトは、彼らが古いIEを落とすことを決めたなら、あなたはそれが良い決断だったと彼らを信頼することができます。ある企業は、IEコードを維持し続けるよりも、古いIEユーザーごとに最新のコンピューターを購入するほうがより多くの利益をもたらすとユーザーに伝えることさえしました(これはまさに彼らが提供したものです)。
janko-m 14

5
「IE8はWindows 7でも標準である」というのを見たとき、私は読書をやめました
Capsule

544

受け入れられた回答は機能styleしますが、私のテストではDOMに空の属性を残しています。大したことではありませんが、これによりすべてが削除されます。

removeAttr( 'style' );

これは、すべての動的スタイルを削除して、スタイルシートのスタイルに戻すことを想定しています。


これはいいアイデアですが、jQueryにバグがあります。提出されたバグを参照してください:bugs.jquery.com/ticket/9500
Tosh

4
@Toshそのバグは2011
ThinkingStiff

私は知っていますが、少なくともバージョン1.7ではまだバグがあります。1.8はテストしていません
Tosh

7
これにより、style属性の他のすべてのプロパティも削除されます。賢明に選択してください。
コーディングリズム2014

1
これは賢いです!受け入れられた回答は、jqueryによって作成されたインラインスタイルがcssスタイルを上書きする必要がある状況では機能しませんが、この方法はすべての状況で正常に機能します。
Farzad YZ 2016

170

jQueryを使用してCSSプロパティを削除するには、いくつかの方法があります。

1. CSSプロパティをデフォルト(初期)値に設定する

.css("background-color", "transparent")

MDNでCSSプロパティの初期値を参照してください。ここでのデフォルト値はtransparentです。inherit複数のCSSプロパティを使用して、親から属性を継承することもできます。CSS3 / CSS4で、あなたも使用することができinitialrevertあるいはunsetこれらのキーワードは、限られたブラウザのサポートを有することができます。

2. CSSプロパティを削除する

空の文字列はCSSプロパティを削除します。

.css("background-color","")

ただし、jQuery .css()のドキュメントで指定されているように、これによりプロパティが削除されますが、背景を含む特定のCSS省略プロパティのIE8との互換性の問題があります。

スタイルプロパティの値を空の文字列($( '#mydiv')。css( 'color'、 '')など)に設定すると、HTMLスタイルであるかどうかにかかわらず、既に直接適用されている要素からそのプロパティが削除されます。属性、jQueryの.css()メソッド、またはスタイルプロパティの直接DOM操作。ただし、スタイルシートまたは要素のCSSルールで適用されたスタイルは削除されません。警告:1つの注目すべき例外は、IE 8以前の場合、境界線や背景などの省略プロパティを削除すると、スタイルシートや要素の設定に関係なく、要素からそのスタイルが完全に削除されることです

3.要素のスタイル全体を削除する

.removeAttr("style")

49

純粋なJavaScriptの方法を知らせるためだけに、純粋なJavaScriptでスタイル属性を削除する方法を得ました

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');

11
男はすでにjQueryを使用しています...なぜブラウザ間メソッドを再実装する必要があるのですか!?!?
ビリー

32
jqueryがすべてではないため、彼女またはおそらく私は開発者がJavaScriptのようなコア言語でそのようなことを行う方法を知っている必要があるので、私はすべての人に言う必要があるので、おそらくこれは私の理論であり、すでに独自のフレームワークを作成しましたコアJavaScriptについての私の知識から、私は自分のコンセプトと私の考え方を持っている他のものを使用することを拒否します:)ところで、あなたのおかげで(-)私は付加価値である必要がありました:)そしてまた、男男ではない彼女は彼女がアレックスという名前の彼女です
マーワン

1
document.allを使用しない場合はチェックしないでください。おそらく、次のようにチェックします。if(elm.style.removeProperty){elm.style.removeProperty(propertyName); } else if(elm.style.removeAttribute){elm.style.removeAttribute(attributeName); }
リチャード

まああなたは正しいですif(navigator.appName == "Microsoft Internet Explorer")document.body.style.removeAttribute( 'background-color'); それ以外の場合はdocument.body.style.removeProperty( 'background-color'); そして、他方であなたの解決策も正しいです:)あなたのメモに感謝します
マーワン

9
いいえ、ブラウザを確認するのではなく、その機能が存在するかどうかを確認する必要があります。MSがIEの次のバージョンで関数名を変更することを決定した場合はどうなりますか?その後、IEのバージョンも確認しますか?
j03w 2013


19

これらのjQuery関数のいずれかが機能するはずです。

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 

22
cssプロパティを1つだけ削除するには:var cssObject = $('selector').prop('style'); cssObject.removeProperty('background-color');
ilgaar

igaar-あなたの解決策は最も穏やかです。「.each」ループに入れて、 "display:none"でなければならないが、他のプロパティは残さなければならないテーブルセルのヒープを作成しました。これは問題なく機能し、display:noneを削除して残りはそのままにしました。
Rob Von Nesselrode 2014


7

次のようなものはどうですか:

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}

これ好き!指定したプロパティのみを削除し、それ以外は何もしません。
Joel

7

プラグインを使用:

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }

あなたのケースでは、次のように使用してください:

$(<mySelector>).removeCss();

または

$(<mySelector>).removeCss(false);

クラスで定義されているCSSも削除したい場合:

$(<mySelector>).removeCss(true);

$(this).removeAttr冗長this.removeAttrで十分です。
Emile Bergeron、2016年

DOESはremoveAttr また、削除されますclassattrの?私はそうは思いません
Abdennour TOUMI

私はremoveAttrあなたのプラグインの内側について話している、どこthisがすでにjQuery要素であるか。$(this)冗長です。
Emile Bergeron

2
ああ!OK OK .. @EmileBergeron、古いjqueryはjQuery要素にマップされたインスタンスthisとして提供しHTMLElementます...ご覧のとおり、私の答えは古いです...それが理由です。 ES6で新しく追加されたアロー関数のため。..そしてthis、それは役に立たなくなり、置き換えられましたevent.currentTarget
Abdennour TOUMI '29

1
けっこうだ!;)JSの世界で3歳というのはおかしい。
エミールベルジェロン

7

これを試して:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.

ありがとう


「既存のものを削除する」の唯一の問題は、1つのセットがある場合、スタイルシートの背景も上書きすることです。
Jtbs 2018年

6

CSSスタイルを使用する場合、以下を使用できます。

$("#element").css("background-color","none"); 

そして次に置き換えます:

$("#element").css("background-color", color);

CSSスタイルを使用せず、HTML要素に属性がある場合は、以下を使用できます。

$("#element").attr("style.background-color",color);



2

CSSクラスを削除したいスタイルを作成してみませんか?今あなたは使うことができます:.removeClass()。これはまた、以下を使用する可能性を開きます。.toggleClass()

(存在する場合はクラスを削除し、存在しない場合は追加してください。)

クラスを追加/削除することで、レイアウトの問題に対処する際の変更/トラブルシューティングの混乱も少なくなります(特定のスタイルが消えた理由を理解しようとするのとは対照的です)。


2
let el = document.querySelector(element)
let styles = el.getAttribute('style')

el.setAttribute('style', styles.replace('width: 100%', ''))

1

これは他のいくつかのソリューションよりも複雑ですが、シナリオでの柔軟性が向上する可能性があります。

1)クラス定義を作成して、適用または削除するスタイリングを選択的に分離(カプセル化)します。空にすることもできます(この場合、おそらく空にする必要があります)。

.myColor {}

2)に基づいて、このコードを使用http://jsfiddle.net/kdp5V/167/からこの答え によってgilly3

function changeCSSRule(styleSelector,property,value) {
    for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
        var ss = document.styleSheets[ssIdx];
        var rules = ss.cssRules || ss.rules;
        if(rules){
            for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
                var rule = rules[ruleIdx];
                if (rule.selectorText == styleSelector) {
                    if(typeof value == 'undefined' || !value){
                        rule.style.removeProperty(property);
                    } else {
                        rule.style.setProperty(property,value);
                    }
                    return; // stops at FIRST occurrence of this styleSelector
                }
            }
        }
    }
}

使用例:http : //jsfiddle.net/qvkwhtow/

警告:

  • 十分にテストされていません。
  • 新しい値に!importantまたはその他のディレクティブを含めることはできません。このような既存のディレクティブは、この操作によって失われます。
  • 最初に見つかったstyleSelectorの出現のみを変更します。スタイル全体を追加または削除することはありませんが、これはより複雑なもので実行できます。
  • 無効または使用できない値は無視されるか、エラーがスローされます。
  • Chromeでは(少なくとも)、ローカルではない(クロスサイトのような)CSSルールはdocument.styleSheetsオブジェクトを通じて公開されていないため、これらのルールでは機能しません。このコードの「最初に見つかった」動作を念頭に置いて、ローカルオーバーライドを追加して操作する必要があります。
  • document.styleSheetsは、一般的に操作に特にフレンドリーではありません。これが積極的な使用で機能するとは期待しないでください。

このようにスタイリングを分離することは、CSSの操作がそうでない場合でも、CSSのすべての目的です。CSSルールの操作はjQueryのすべてではなく、jQueryがDOM要素を操作し、CSSセレクターを使用して行います。


1

シンプルは、ウェブ開発では安価です。特定のスタイルを削除するときは空の文字列を使用することをお勧めします

$(element).style.attr = '  ';

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