Hapus atribut "atas" dan "kiri" CSS dengan jQuery

169

Saya sedang membangun peta yang dapat diseret yang ketika peta diseret elemen diberi atribut 'kiri' dan 'atas' dengan nilai untuk masing-masing begitu ...

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

Saya memiliki tombol yang ingin saya hapus atribut atas dan kiri dari gaya inline pada div ketika diklik, Apakah ini mungkin dengan jquery?

Liam
sumber
9
Ya itu. Setidaknya Anda dapat mengaturnya ke nilai kosong, yang menghapusnya.
Felix Kling
Kemungkinan duplikat: Hapus atribut CSS menggunakan Jquery . Jawaban di sana mungkin bermanfaat bagi Anda.
Drew Gaynor
Catatan yang ' 'tidak dihitung sebagai nilai kosong saja''
Peter Berg
3
Untuk menghapus hanya satu properti css sekaligus: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Hanya sebagai catatan, pengaturan ke kosong tidak selalu berfungsi: "Mengatur nilai properti style ke string kosong ... Namun, itu tidak menghapus gaya yang telah diterapkan dengan aturan CSS dalam stylesheet atau < gaya> elemen. " - lihat stackoverflow.com/questions/27791484/…
Mörre

Jawaban:

139

Nilai default untuk CSS topdan leftsedang auto, jadi mengaturnya ke yang mungkin setara tergantung pada apa yang Anda coba lakukan:

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

Anda juga memiliki opsi untuk menghapus styleatribut sepenuhnya :

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

Namun, jika Anda menggunakan komponen jQuery UI lainnya, itu mungkin memerlukan gaya sebaris yang tidak ingin Anda hapus, jadi lanjutkan dengan hati-hati di sana.

Rob Hruska
sumber
61
biasanya overwrite yang ditambahkan ke atribut style dimaksudkan untuk mengubah nilai off dari nilai css default; mengaturnya ke otomatis tidak mengatur ulang ke nilai default. artinya otomatis tidak benar-benar sama maka tidak memiliki nilai sama sekali. jadi jawaban yang benar adalah $ ('map'). css ('top', '');
dsomnus
15
Jawaban ini salah, Anda tidak menghapus atribut tetapi menggantinya dengan yang lain. Juga, menghapus seluruh tag gaya tidak masuk akal, orang mungkin ingin menyimpan beberapa attrs dan menghapus yang lain .. jawaban wtrevino adalah yang benar.
Alex
Ini bukan pilihan penting sehingga memiliki itu bagus! :) Untuk bidang seperti nama pengguna
Dean Meehan
5
Sebagai catatan, jawaban @ wtrevino haruslah yang diterima di sini. Solusi khusus ini bekerja untuk saya dalam beberapa keadaan, tetapi saya akan menghapus jawaban ini jika saya bisa. Sayangnya, karena diterima, itu tidak akan membiarkan saya.
Rob Hruska
Ini bukan jawaban yang benar ... @wtrevino jawaban adalah yang paling benar. Jawaban ini hanya akan berfungsi jika Anda ingin menghapus semua gaya statis dari elemen ... dalam banyak kasus ini bukan apa yang ingin Anda lakukan.
Lars
427

Jika Anda ingin secara khusus menghapus atribut atas dan kiri dan meninggalkan yang lain, Anda dapat melakukan ini:

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

Atau, padanan yang lebih pendek:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
sumber
64
ini adalah jawaban yang lebih baik daripada yang dipilih.
phirschybar
Ya. Ini adalah jawaban yang benar. Awalnya tidak masuk akal, karena terlihat seperti ".css ('top', '')" hanya membuat aturan 'top' kosong, tetapi tidak, itu menghapusnya sepenuhnya.
Starkers
2
Ini adalah jawaban terbaik. Tapi saya pikir saya menemukan yang lain. Saya mencoba beberapa yang berbeda. .css('left', undefined);tidak mengubah apa pun. Melewati nol juga tidak melakukan apa-apa. Tetapi .css('left', false);menghapus properti itu.
Viktor
Seperti yang disarankan orang lain, ini harus dianggap sebagai jawaban yang benar.
1
@ Viktor Perhatikan bahwa dokumentasi secara eksplisit mengatakan untuk menggunakan string kosong. Saya bertanya-tanya apakah salah terjadi pada pekerjaan karena paksaan jenis tidak berdokumen yang bisa hilang di masa depan? api.jquery.com/css
Jeremy Wadhams
37

Anda dapat menghapus semua konten dalam styleatribut dengan melakukan:

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

Dan Anda dapat menghapus spesifik styledengan melakukan:

$('.map').css('top', '');
$('.map').css('left', '');
Anish Gupta
sumber
30

Cukup setel properti CSS dengan string kosong, misalnya dengan kode berikut:

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

Lihat Dokumentasi jQuery di CSS .

khotyn
sumber
3
Tidak yakin mengapa ini bukan jawaban yang diterima. Jawaban yang diterima sebenarnya adalah hacky karena sebenarnya tidak menghapus properti CSS dari objek, yang merupakan judul pertanyaan.
Paul Go
6
  1. Buka di sini: API jQuery
  2. Ctrl + F untuk 'hapus'
  3. Baca:

Menyetel nilai properti style ke string kosong - mis. $ ("#Mydiv") .css ("color", "") - menghapus properti itu dari suatu elemen jika sudah diterapkan secara langsung, baik dalam gaya HTML atribut, melalui metode .css () jQuery, atau melalui manipulasi DOM langsung dari properti style.

Dokumen memberi Anda pendekatan saat ini, yang disarankan untuk apa yang ingin Anda capai, yang sering kali dapat menghemat waktu Anda karena Anda tidak harus membaca bolak-balik perang api pada stack overflow (tidak peduli seberapa menyenangkan / mencerahkan yang mungkin terjadi !).

Jacob McKay
sumber
5

Per laporan bug JQuery ini

element.removeAttr ('style')
tidak bekerja secara konsisten di browser berbasis Webkit. Misalnya, saya menemukan masalah ini di iOS 6.1. Cara mengatasinya adalah dengan menggunakan:
element.attr ('style', '')

Gnmerritt
sumber
2

Jika Anda ingin menghapus semua itu, Anda bisa melakukannya

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

}

maka jika Anda ingin menghapus css prop (s):

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

Menurut pendapat saya, cara terbersih adalah menghapus properti sepenuhnya dari elemen CSSStyleDeclaration , alih-alih menimpanya dengan semacam nilai nol / nol / standar:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");
Martin
sumber
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(';')+';');

}

Hapus dengan aman dengan plugin ini!

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

Abdennour TOUMI
sumber
0

Ada beberapa gaya yang tidak dapat dengan mudah dihapus. (Meluap ke pikiran)

Solusinya adalah membuat 2 kelas yang berbeda dan menambah / menghapus yang berisi gaya yang Anda inginkan.

BUKAN solusi terbaik untuk properti gaya yang dapat dengan mudah dihapus / dinonaktifkan.

Petre Dan
sumber
0

Untuk menghapus gaya css, berikan string kosong ke gaya

pada kasus ini

$('.map').css({top:'',left:''});
faboulaw
sumber
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Kata Erraoudy
sumber
ini set ke 0, tidak menghapus properti
Martin Massera