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.

yoavf
sumber
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");
Eran Galperin
sumber
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)

Jeremy Moritz
sumber
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

Pim Jager
sumber
11

Saya melakukan sesuatu yang mirip dengan konstruksi ini

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});
Petr Safar
sumber
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.

Tim Knight
sumber
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');
Sébastien
sumber
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

Prassanna D Manikandan
sumber
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.

rfornal
sumber