jQueryを使用してインラインスタイルを削除することは可能ですか?


236

jQueryプラグインはインラインスタイル(display:block)を適用しています。私は怠惰な気持ちで、で上書きしたいと思っていますdisplay:none

最良の(怠惰な)方法は何ですか?


79
SOでサポートを依頼してください:)
Dave Swersky

15
最善の方法と怠惰な方法は必ずしも同じではありません。
Joel

1
私は、最高の開発者が怠惰であるという議論をよく耳にします... blog.codinghorror.com/how-to-be-lazy-dumb-and-successful
kaelle

removeAttr()または.css()を使用して2つの方法でi、eを実現できます。codepedia.info/ jquery
remove

回答:


381

更新:次の解決策は機能しますが、はるかに簡単な方法があります。下記参照。


ここに私が思いついたものがあり、これがあなたや他の人に役立つことを願っています:

$('#element').attr('style', function(i, style)
{
    return style && style.replace(/display[^;]+;?/g, '');
});

これにより、そのインラインスタイルが削除されます。

これがあなたの望んだものかどうかはわかりません。あなたはそれを上書きしたかったのですが、すでに指摘したように、これはによって簡単に実行でき$('#element').css('display', 'inline')ます。

私が探していたのは、インラインスタイルを完全に削除するソリューションでした。インラインCSS値を一時的に設定する必要があるが、後でそれらを削除したい場合、私が書いているプラ​​グインにこれ​​が必要です。スタイルシートに制御を取り戻したい。元の値をすべて保存してインラインに戻すことでそれを行うことができましたが、この解決策は私にはずっとすっきりしています。


ここではプラグイン形式です:

(function($)
{
    $.fn.removeStyle = function(style)
    {
        var search = new RegExp(style + '[^;]+;?', 'g');

        return this.each(function()
        {
            $(this).attr('style', function(i, style)
            {
                return style && style.replace(search, '');
            });
        });
    };
}(jQuery));

このプラグインをスクリプトの前のページに含めると、次のように呼び出すことができます

$('#element').removeStyle('display');

これでうまくいくはずです。


更新:これはすべて無駄であることに気づきました。あなたは単にそれを空白に設定することができます:

$('#element').css('display', '');

自動的に削除されます。

これはドキュメントから引用です:

スタイルプロパティの値を空の文字列に設定します。たとえば$('#mydiv').css('color', '')、HTMLスタイル属性で、jQueryの.css()メソッドを通じて、またはスタイルプロパティの直接DOM操作を通じて直接適用されている場合、要素からそのプロパティを削除します。ただし、スタイルシートまたは<style>要素のCSSルールで適用されたスタイルは削除されません。

ここではjQueryが魔法をかけているとは思いません。そうですstyle、オブジェクトがネイティブにこれを行います


3
@ximi-ありがとう。私はこれについて考えていましたが、これはそれほどの時間の無駄ではないと判断しました。これは、jQueryで現在サポートされていないインラインスタイルをチェックするために採用できます(.css('property')値を提供しますが、インラインスタイルからのものかどうかはわかりません)。
ジョセフ・シルバー、2011年

私は独立して同じ結論に達しました-空の文字列は私たちが望むことだけをするようです。それはAPIで公式に文書化されていませんが、うまくいけばうまくいきます。
Jon z

@Jonzは- されて正式に(それが追加されたとき、私は知りませんが、私はもともとこの投稿をする場合があり、それを見て覚えていない)文書化。また、jQueryがここで何かをしているとは思いません。ネイティブstyleオブジェクトは同じように動作するようです。私はこの情報で私の答えを修正しました。
ジョセフSilber

これはfont-familyなどで機能しますか、それとも-正規表現を台無しにしますか?
TMH 2014

4
@mosh-なぜ使用しないのです$('#element').css('display', '')か?
ジョセフSilber

157

.removeAttr("style") スタイルタグ全体を取り除くだけです...

.attr("style") 値をテストし、インラインスタイルが存在するかどうかを確認するには...

.attr("style",newValue) それを別のものに設定する


18
これは、だけでなく、すべてのインラインスタイルに影響ますdisplay
10

1
音の良い悪いそれを試してみると、あなたが知っている、私はすべてのインラインスタイルクリアするには、通常、とても幸せインラインスタイルは絶対に使用しない
のHaroldo

11
@Slaksまあ、それは私が「スタイルタグ全体を取り除く」によって意味したものです;)
ハイゼンベルク

こんにちは。インラインスタイルなどの任意のソースから... $( '*')に適用されている 'style'があるかどうかを確認する方法はありますか。何かを削除/リセットするか、単純にすべてを一度にリセットしますか?
Milche Patern 2014

すべてのインラインスタイルを個別に削除しても(空になった)style属性は削除されないため、これは注目に値します。
ブリリアント

26

(jQueryによって生成された)インラインスタイルを削除する最も簡単な方法は次のとおりです。

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

インラインコードが消え、オブジェクトがCSSファイルで事前定義されたスタイルに適合するはずです。

私のために働いた!


13

jQueryのcssメソッドを使用してスタイルを設定できます。

$('something:visible').css('display', 'none');

@Kobi:彼はどんなインラインスタイルについても尋ねています。
SLaks

えっ、何?何か分からないのかもしれません。私が考えています<div style="display:block;">$('div').hide()
Kobi

3
@Kobi:hideインラインスタイルを変更する特別なケースに対処します。この回答はすべてのケースに対応しています。(hide/show2つの値が切り替えられる2つの制限もあります。つまり、none-> blockまたはnone-> inlineです。)
Joel

@Joel:hide/ showはの古い値を記憶し、display正しく復元します。
SLaks

@SLaks:いいね。以前に問題があったことを覚えているので、最近追加されたはずです。
Joel

12

次のようなjqueryプラグインを作成できます。

jQuery.fn.removeInlineCss = (function(){
    var rootStyle = document.documentElement.style;
    var remover = 
        rootStyle.removeProperty    // modern browser
        || rootStyle.removeAttribute   // old browser (ie 6-8)
    return function removeInlineCss(properties){
        if(properties == null)
            return this.removeAttr('style');
        proporties = properties.split(/\s+/);
        return this.each(function(){
            for(var i = 0 ; i < proporties.length ; i++)
                remover.call(this.style, proporties[i]);
        });
    };
})();

使用法

$(".foo").removeInlineCss(); //remove all inline styles
$(".foo").removeInlineCss("display"); //remove one inline style
$(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles

1
この回答でもjQueryをなしとない多くの開発者が知っている、呼び出し可能性があると便利です非常にきちんとした1行のトリックが含まelem.style.removeProperty('margin-left')だけ削除されますmargin-leftから、style属性(およびそのプロパティの値を返す)を。IE6-8の場合はelem.style.removeAttribute()です。
craigpatik 2016

9

怠惰な方法(これにより、将来のデザイナーはあなたの名前を呪い、あなたを眠りに殺します):

#myelement 
{
    display: none !important;
}

免責事項:私はこのアプローチを推奨しませんが、それは確かに怠惰な方法です。


2
これは悪い習慣「怠惰」の精神にあるので、これは明らかに質問に対する最良の答えです。乾杯!
ktamlyn 2013年

6
$('div[style*=block]').removeAttr('style');

$( 'div [style]')。removeAttr( 'style');についてはどうですか?
skybondsor 2014年

@skybondsorは、ブロック要素だけを削除するのではなく、彼が望んでいたように
14

ああ、そうです。彼はすべてからインラインスタイルを削除したいと思った。
skybondsor 2014年


6

スタイル属性内のプロパティを削除したい場合-それを別のものに設定するだけではなく-メソッドを利用しますremoveProperty()

document.getElementById('element').style.removeProperty('display');

更新:さまざまな方法とその結果をいじる
インタラクティブなフィドルを作成しました。どうやら、そこの差のあまりないですset to empty stringset to faux valueremoveProperty()。これらはすべて同じフォールバックになります。これは、事前に指定されたCSSルールまたはブラウザーのデフォルト値です。


5

表示がスタイルの唯一のパラメーターである場合は、次のコマンドを実行してすべてのスタイルを削除できます。

$('#element').attr('style','');

要素が以前は次のように見えた場合、

<input id="element" style="display: block;">

これで、要素は次のようになります。

<input id="element" style="">


2

プラグインを変更して、スタイルを適用しないようにします。それはその後スタイルを削除するよりもはるかに良いでしょう。


1
したがって、「怠惰」です!それがどのプラグインのどのビットであるかを見つけるのに困ったことはありません!
Haroldo

4
あなたが怠惰をどのように定義するのかわかりません、私はどうやってそれを行うのかと答えました。プラグインの外でパッチを適用するのではなく、問題が発生した場所を修正することは理にかなっているようです。そのようにするとき、私は混乱を予測します。
Josh Stodola

どちら?プラグインを編集する場合、変更を上書きしてレイアウトを台無しにする新しいバージョンに更新した後に問題が発生する可能性があります。あなたがそこで少しの調整をしたことを一年かそこらの時間で誰が覚えますか?私は常にプラグインのソースコードを変更する以外の解決策を見つけようとします
Zefiryn

1

$el.css({ height : '', 'margin-top' : '' });

等...

2番目のパラメーターを空白のままにしてください!


1
皆さんが反対票を投じた場合は、コメントを残してください。
彼はNrikが2014

1
あなたが尋ねられた質問に答えなかったので、あなたは反対票を得たと思います:"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"。あなたのテキストは正しいですが、あなたのコードは質問を解決しません。
コーディング

私が抱えていた問題を解決しました。Tnx。
yodalr 2017

0

$("#element").css({ display: "none" });

最初にCSSでインラインスタイルを削除しようとしましたが、それは機能せず、表示のような新しいスタイル:何も上書きされません。しかし、JQueryでは次のように機能します。


0

widthプロパティにも同様の問題がありました。コードから!importantを削除できませんでした。新しいテンプレートでこのスタイルが必要なため、要素にID(モーダルスタイル)を追加し、その後、次のコードをテンプレートに追加しました。

<script type="text/javascript">
    $('#modalstyling').css('width', '');    //Removal of width !important
    $('#modalstyling').width('75%');        //Set custom width
</script>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.