Mengubah ID elemen dengan jQuery


302

Saya perlu mengubah ID elemen menggunakan jQuery.

Tampaknya ini tidak berhasil:

jQuery(this).prev("li").attr("id")="newid"
jQuery(this).prev("li")="newid"

Saya mengetahui bahwa saya dapat mewujudkannya dengan kode berikut:

jQuery(this).prev("li")show(function() {
    this.id="newid";
});

Tapi itu sepertinya tidak benar bagiku. Pasti ada cara yang lebih baik, bukan? Juga, jika tidak ada, metode lain apa yang bisa saya gunakan daripada menunjukkan / menyembunyikan atau efek lainnya? Jelas saya tidak ingin menampilkan / menyembunyikan atau memengaruhi elemen setiap saat, hanya untuk mengubah ID-nya.

(Yap, saya seorang pemula jQuery.)

Sunting
Saya tidak bisa menggunakan kelas dalam hal ini, saya harus menggunakan ID.


5
Dalam JavaScript, Anda dapat menetapkan ke variabel ( foo = 1), anggota objek ( foo.bar = 2atau foo['bar'] = 2), atau array array ( foo[0] = 3), tetapi menetapkan ke ekspresi, seperti hasil dari operator ( (x + b) = 5) atau hasil dari panggilan fungsi ( foo() = 1, foo(x).bar(y) = 7) tidak masuk akal, jadi sudah pasti tidak akan seperti cara kerjanya di jQuery atau perpustakaan JavaScript lainnya.
rakslice

Jawaban:


521

Sintaks Anda salah, Anda harus memberikan nilai sebagai parameter kedua:

jQuery(this).prev("li").attr("id","newId");

4
Saya pikir newId harus dalam tanda kutip
Jay Corbett

5
Tidakkah Anda perlu melepaskan elemen dari DOM dan menggantinya dengan elemen baru dengan ID baru di tempatnya? Untuk menghindari melanggar DOM ...?
cllpse

15
jQuery menangani masalah itu, roosteronacid.
McPherrinM

15
tiba di sini ganda memeriksa id penugasan - harus ini sekarang menjadi .prop( ... )bukan .attr( ... )?
Carl

2
@Carl menurut dokumen & contoh jquery terbaru, idmasih harus ditetapkan menggunakanattr(...)
JoeBrockhaus

71

OPSI PREFERRED over .attradalah menggunakan .propseperti:

$(this).prev('li').prop('id', 'newId');

.attrmengambil atribut elemen sedangkan .propMemperoleh kembali properti yang referensi atribut (yaitu apa yang Anda benar-benar berniat untuk memodifikasi)


4
.attr telah ditinggalkan - ini adalah cara yang benar untuk melakukannya.
PointlessSpike

7
Dari mana informasi ini berasal? api.jquery.com/attr mengatakan apa-apa tentang penghinaan ...
Sergej

Itu tidak usang. " Pada jQuery 1.6 , .prop()metode ini menyediakan cara untuk secara eksplisit mengambil nilai properti, sambil .attr()mengambil atribut."
Illuminator

@Illuminator, saya mengoreksi jawaban saya. Terima kasih.
Jeremy Moritz

45

Yang ingin Anda lakukan adalah:

jQuery(this).prev("li").attr("id", "newID");

Itu akan mengatur ID ke ID baru


11

Saya melakukan sesuatu yang mirip dengan konstruksi ini

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});

7

Saya tidak yakin apa tujuan Anda, tetapi mungkinkah lebih baik menggunakan addClass? Maksud saya ID objek menurut saya harus statis dan spesifik untuk objek itu. Jika Anda hanya mencoba mengubahnya agar tidak ditampilkan di halaman atau sesuatu seperti itu, saya akan meletakkan detail-detail itu di kelas dan kemudian menambahkannya ke objek daripada mencoba mengubah ID itu. Sekali lagi, saya katakan itu tanpa memahami tujuan yang Anda garis bawahi.


3
kegembiraan sistem warisan - saya mengerti rasa sakit Anda saat itu. Jawaban Eran jelas yang terbaik.
Tim Knight

5
Sebenarnya pengaturan id adalah hal yang berguna dan bermanfaat untuk dilakukan jika Anda membangun DOM dengan menggunakan templat tersembunyi di HTML dan kemudian mengkloningnya menggunakan jquery.
Steve Knight

5
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID');

1
Solusi ini sudah disediakan di sini
Cristik

1
Tolong jangan memposting jawaban hanya kode - selalu tambahkan penjelasan untuk kode Anda dalam jawabannya.
Daniel W.

2
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

Ini bisa dilakukan untuk semua tujuan. Cukup tambahkan sebelum tag penutup tubuh Anda dan jangan sampai bisa menambahkan Jquery.min.js


0

Jawaban Eran baik, tetapi saya akan menambahkannya. Anda perlu menonton interaktivitas apa pun yang tidak sejalan dengan objek (yaitu, jika acara onclick memanggil fungsi, itu masih akan), tetapi jika ada beberapa penanganan acara javascript atau jQuery yang melekat pada ID itu, pada dasarnya akan ditinggalkan :

$("#myId").on("click", function() {});

Jika ID sekarang diubah menjadi # myID123, fungsi yang terlampir di atas tidak akan berfungsi dengan benar dari pengalaman saya.

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.