JQuery ile bir öğenin kimliğini değiştirme


302

JQuery kullanarak bir öğenin kimliğini değiştirmek gerekiyor.

Görünüşe göre bunlar işe yaramıyor:

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

Aşağıdaki kod ile bunu yapabilirim öğrendim:

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

Ama bu benim için doğru gözükmüyor. Daha iyi bir yol olmalı, değil mi? Ayrıca, olmaması durumunda, show / hide veya diğer efektler yerine başka hangi yöntemi kullanabilirim? Açıkçası, öğeyi her seferinde göstermek / gizlemek veya etkilemek istemiyorum, sadece kimliğini değiştirmek için.

(Evet, ben bir jQuery acemi oldum.)

Düzenle
Bu durumda sınıfları kullanamıyorum, kimlikleri kullanmalıyım.


5
JavaScript'te, bir değişkene ( foo = 1), bir nesneye ( foo.bar = 2veya foo['bar'] = 2) veya dizi aboneliğine ( foo[0] = 3) atayabilir, ancak bir işleç ( (x + b) = 5) veya bir işlev çağrısının sonucu gibi bir ifadeye atayabilirsiniz ( foo() = 1, foo(x).bar(y) = 7) hiçbir anlam ifade etmiyor, bu yüzden jQuery veya başka bir JavaScript kütüphanesinde işlerin çalışması kesinlikle olmayacak.
rakslice

Yanıtlar:


521

Sözdiziminiz yanlışsa, değeri ikinci parametre olarak iletmeniz gerekir:

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

4
NewId tırnak içinde olmalı
Jay Corbett

5
Öğeyi DOM'dan ayırmanız ve yerine yeni bir kimlik içeren yeni bir öğeyle değiştirmeniz gerekmez mi? DOM'yi kırmamak için ...?
cllpse

15
jQuery bununla ilgilenir, roosteronasit.
McPherrinM

15
buraya çift kontrol kimliği yeniden atama geldi - bu şimdi .prop( ... )yerine .attr( ... )mi?
Carl

2
@ En son jquery dokümanlarına ve örneklerine göre araba, idyine de kullanılmalıdırattr(...)
JoeBrockhaus

71

TERCİH EDİLEN BİR SEÇENEK .attrşu şekilde kullanılır .prop:

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

.attröğenin özniteliğini alırken .prop, özniteliğin başvurduğu özelliği alır (yani aslında değiştirmek istediğiniz şey )


4
.attr kullanımdan kaldırıldı - bunu yapmanın doğru yolu bu.
PointlessSpike

7
Bu bilgi nereden geliyor? api.jquery.com/attr , kullanımdan çıkarma hakkında hiçbir şey söylemiyor ...
Sergej

Onaylanmadı. " JQuery 1.6'dan itibaren .prop()yöntem, .attr()öznitelikleri alırken özellik değerlerini açıkça almanın bir yolunu sunar ."
Aydınlatıcı

@ Aydınlatıcı Cevabımı buna göre düzelttim. Teşekkürler.
Jeremy Moritz

45

Ne demek istiyorsun:

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

Bu, kimliği yeni kimliğe ayarlar


11

Bu yapıya benzer bir şey yaptım

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

7

Hedefinizin ne olduğundan emin değilim, ancak bunun yerine addClass'ı kullanmak daha iyi olabilir mi? Bence bir nesne kimliği statik ve o nesneye özgü olmalıdır. Sadece sayfada veya bunun gibi bir şeyde gösterilmesini değiştirmeye çalışıyorsanız, bu ayrıntıları bir sınıfa koyar ve daha sonra kimliğini değiştirmeye çalışmak yerine nesneye eklerdim. Tekrar söylüyorum, altını çizdiğiniz amacınızı anlamadan.


3
eski sistemlerin sevinci - acınızı anlıyorum. Eran'ın cevabı kesinlikle en iyisidir.
Tim Şövalye

5
Aslında kimliğin ayarlanması, HTML'de gizli şablonlar kullanarak DOM'u oluşturup ardından jquery kullanarak klonlama yapıyorsanız, yararlı ve faydalı bir şeydir.
Steve Knight

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

1
Bu çözüm zaten burada
Cristik

1
Lütfen yalnızca kod yanıtları göndermeyin; yanıtta kodunuza her zaman bir açıklama ekleyin.
Daniel W.

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

Bu her amaca uygun olabilir. Sadece vücut kapanış etiketinizden önce ekleyin ve Jquery.min.js'yi eklemeye çalışmayın


0

Eran'ın cevabı iyi, ama buna eklenirdim. Nesneye satır içi olmayan herhangi bir etkileşimi izlemeniz gerekir (yani, bir onclick olayı bir işlevi çağırırsa, yine de olur), ancak bu kimliğe eklenmiş bazı javascript veya jQuery olay işleme varsa, temel olarak terk edilir :

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

Kimlik şimdi # myID123 olarak değiştirilirse, yukarıdaki işlev artık deneyimimden doğru şekilde çalışmayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.