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?


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.


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': ''
});

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', '');

30

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

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

Lihat Dokumentasi jQuery di CSS .


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 !).


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', '')


2

Jika Anda ingin menghapus semua itu, Anda bisa melakukannya

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

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();

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");

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');


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.


0

Untuk menghapus gaya css, berikan string kosong ke gaya

pada kasus ini

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.