jQueryを使用してCSSの「トップ」および「レフト」属性を削除する


169

ドラッグ可能なマップを作成しています。マップがドラッグされると、要素には「左」属性と「上」属性がそれぞれに値が与えられます...

<div class="map" style="top:200px; left:100px;">Map</div>

クリックすると、divのインラインスタイルから上部と左側の属性を削除するボタンがあります。これはjqueryで可能ですか?


9
はい、そうです。少なくとも、それらを空の値に設定して、それを削除することができます。
Felix Kling

重複の可能性:Jqueryを使用してCSS属性を削除します。そこにある答えが参考になるかもしれません。
ドリューゲイナー、

これ' 'は空の値としてのみカウントされないことに注意してください''
Peter Berg

3
一度に1つのcssプロパティのみを削除するには:var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar

記録のためだけに、空に設定しても常に機能するとは限りません。「スタイルプロパティの値を空の文字列に設定します...ただし、スタイルシートまたは<のCSSルールで適用されたスタイルは削除されません。スタイル>要素。」-参照stackoverflow.com/questions/27791484/...
Mörre

回答:


139

CSSのデフォルト値topとはleftされているautoので、あなたがやろうとしているものに応じて、同等であるかもしれないことにそれらを設定します:

$('.map').css('top', 'auto').css('left', 'auto');

style属性を完全に削除することもできます。

$('.map').removeAttr('style');

ただし、他のjQuery UIコンポーネントを使用している場合は、削除したくないインラインスタイルが必要になる可能性があるため、注意して続行してください。


61
通常、style属性に追加されたこのような上書きは、デフォルトのcss値から値を変更するためのものです。autoに設定しても、デフォルト値にリセットされません。つまり、autoは実際には同じではなく、値をまったく持っていません。正解は$( 'map')。css( 'top'、 '');になります。
dsomnus 2013

15
この答えは間違っています。属性を削除するのではなく、別の属性に置き換えます。また、スタイルタグ全体を削除するのはあまり意味がありません。いくつかの属性を保持して、他の属性を削除したい場合があります。wtrevinoの答えは正しいものです。
Alex

それは必須のオプションではないので、そこにあることは素晴らしいことです!:)ユーザー名などのフィールド
Dean Meehan

5
記録としては、@ wtrevinoの回答がここで受け入れられるはずです。この特定の解決策は状況によってはうまくいきましたが、できればこの答えは削除します。残念ながら、それが受け入れられたので、それは私をさせません。
Rob Hruska、2014年

これは正しい答えではありません... @wtrevinoの答えが最も正しいです。この回答は、要素からすべての静的スタイルを削除する場合にのみ機能します...ほとんどの場合、これはあなたがしたいことではありません。
Lars

427

上と左の属性を明確に削除し、他の属性を残したい場合は、次のようにします。

$('.map').css('top', '').css('left', '');

または、より短い同等物:

$('.map').css({
    'top': '',
    'left': ''
});

64
これは選択したものよりも良い答えです。
phirschybar 2013年

うん。これは正しい答えです。".css( 'top'、 '')"は単に空の 'top'ルールを作成するだけなので、最初は意味がありませんでしたが、完全に削除されます。
スターカーズ2013

2
これはまだ最良の答えです。しかし、私は別のものを見つけたと思います。私はいくつかの異なるものを試しました。.css('left', undefined);何も変更しませんでした。nullを渡しても何も起こりませんでした。ただし.css('left', false);、そのプロパティは削除されます。
Viktor

他の人が示唆しているように、これは正解と見なされるべきです。

1
@Viktorドキュメントでは、空の文字列を使用するように明示的に指示されていることに注意してください。ドキュメントに記載されていない型強制が将来なくなる可能性があるため、falseが機能するのだろうか?api.jquery.com/css
Jeremy Wadhams 16年

37

次のようにして、style属性のすべてのコンテンツを削除できます。

$('.map').removeAttr('style');

また、次のようにして特定styleのを削除できます。

$('.map').css('top', '');
$('.map').css('left', '');

30

次のコードのように、CSSプロパティに空の文字列を設定するだけです。

$('#mydiv').css('color', '');

CSSのjQueryドキュメントを参照してください。


3
なぜこれが受け入れられない答えなのかわからない。実際に受け入れられた回答は、オブジェクトのCSSプロパティ(質問のタイトル)を実際に削除しないため、ハックです。
Paul Go

6
  1. ここに行く:jQuery API
  2. Ctrl + Fで「削除」
  3. 読んだ:

スタイルプロパティの値を空の文字列($( "#mydiv").css( "color"、 "")など)に設定すると、HTMLスタイルであるかどうかにかかわらず、既に直接適用されている場合は、そのプロパティが要素から削除されます。属性、jQueryの.css()メソッド、またはスタイルプロパティの直接DOM操作。

ドキュメントは、達成しようとしていることに対する現在の推奨されるアプローチを提供します。これは、スタックオーバーフローで炎上戦争を何度も読み直す必要がないため、多くの場合、時間を節約できます(どんなに楽しい/啓蒙であっても) !)。


5

このJQueryバグレポートごと

element.removeAttr( 'style')
Webkitベースのブラウザで一貫して機能しません。たとえば、iOS 6.1でこの問題に遭遇しました。修正は使用することです:
element.attr( 'スタイル'、 '')


2

すべて削除したい場合は、

$('.map').removeAttr('style');

2
$.fn.removeCss=function(prop){
   if(!prop){
          return $(this).removeAttr('style').removeAttr('class');
     }
    else{
         return $(this).css(prop,null);
    }

}

次に、CSSプロパティを削除する場合:

    $('#mydiv').removeCss('color');
//To remove all prop Css
    $('#mydiv').removeCss();

1

私の意見では、最もクリーンな方法は、ある種のnull / zero / default値で上書きするのではなく、要素のCSSStyleDeclarationからプロパティを完全に削除することです。

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");

0
$.fn.removeCss=function(toDelete){

    var props=$(this).attr('style').split(';');
var tmp=-1;
for( var p=0;p<props.length; p++){if(props[p].indexOf(toDelete)!==-1){tmp=p}};
if(tmp!==-1){

   delete props[tmp];
}

  return $(this).attr('style',props.join(';')+';');

}

このプラグインで安全に削除してください!

$( 'myDiv')。removeCss( 'color');


0

簡単に取り外せないスタイルもあります。

回避策は、2つの異なるクラスを作成し、必要なスタイルを含むクラスを追加/削除することです。

簡単に削除/無効化できるスタイルプロパティの最善の解決策ではありません。


0

CSSスタイルを削除するには、スタイルに空の文字列を割り当てます

この場合

$('.map').css({top:'',left:''});

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