Modifica dell'ID di un elemento con jQuery


302

Devo cambiare l'ID di un elemento usando jQuery.

Apparentemente questi non funzionano:

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

Ho scoperto che posso farlo accadere con il seguente codice:

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

Ma questo non mi sembra giusto. Deve esserci un modo migliore, no? Inoltre, in caso contrario, quale altro metodo posso usare al posto di show / hide o altri effetti? Ovviamente non voglio mostrare / nascondere o influenzare l'elemento ogni volta, solo per cambiare il suo ID.

(Sì, sono un principiante di jQuery.)

Modifica
Non posso usare le classi in questo caso, devo usare gli ID.


5
In JavaScript, puoi assegnare a una variabile ( foo = 1), un membro di un oggetto ( foo.bar = 2o foo['bar'] = 2) o un indice di matrice ( foo[0] = 3), ma assegnando a un'espressione, come il risultato di un operatore ( (x + b) = 5) o il risultato di una chiamata di funzione ( foo() = 1, foo(x).bar(y) = 7) non ha alcun senso, quindi non sarà sicuramente il modo in cui funzionano le cose in jQuery o in qualsiasi altra libreria JavaScript.
Rakslice,

Risposte:


521

La sintassi non è corretta, dovresti passare il valore come secondo parametro:

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

4
Penso che newId dovrebbe essere tra virgolette
Jay Corbett l'

5
Non è necessario staccare l'elemento dal DOM e sostituirlo con un nuovo elemento con un nuovo ID al suo posto? Per evitare di rompere il DOM ...?
cllpse

15
jQuery se ne occupa, roosteronacid.
McPherrinM,

15
arrivato qui ricontrollando ID riassegnazione - questo dovrebbe essere ora .prop( ... )invece di .attr( ... )?
Carl

2
@Carl secondo gli ultimi documenti ed esempi jquery, iddovrebbe ancora essere impostato usandoattr(...)
JoeBrockhaus

71

Un'OPZIONE PREFERITA .attrè quella di utilizzare in questo .propmodo:

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

.attrrecupera l'attributo dell'elemento mentre .proprecupera la proprietà a cui fa riferimento l'attributo (ovvero ciò che si intende effettivamente modificare)


4
.attr è stato deprecato: questo è il modo corretto di farlo.
PointlessSpike

7
Da dove viene questa informazione? api.jquery.com/attr non dice nulla sulla deprecazione ...
Sergej,

Non è deprecato. " A partire da jQuery 1.6 , il .prop()metodo fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr()recupera gli attributi."
Illuminatore

@Illuminator Ho corretto la mia risposta di conseguenza. Grazie.
Jeremy Moritz,

45

Quello che intendi fare è:

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

Ciò imposterà l'ID sul nuovo ID


11

Ho fatto qualcosa di simile con questo costrutto

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

7

Non sono sicuro di quale sia il tuo obiettivo, ma potrebbe essere preferibile utilizzare addClass invece? Voglio dire, un ID oggetto secondo me dovrebbe essere statico e specifico per quell'oggetto. Se stai solo cercando di cambiarlo dalla visualizzazione sulla pagina o qualcosa del genere, metterei quei dettagli in una classe e poi li aggiungerei all'oggetto piuttosto che provare a cambiare il suo ID. Ancora una volta, lo sto dicendo senza capire il tuo obiettivo sottolineato.


3
le gioie dei sistemi legacy - Capisco il tuo dolore allora. La risposta di Eran è sicuramente la migliore allora.
Tim Knight,

5
In realtà l'impostazione dell'id è una cosa utile e utile da fare se stai costruendo il DOM usando template nascosti nell'HTML e poi clonandoli usando jquery.
Steve Knight,

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

1
Questa soluzione era già stata fornita qui
Cristik,

1
Si prega di non pubblicare risposte di solo codice - aggiungere sempre una spiegazione al codice nella risposta.
Daniel W.

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

Questo potrebbe fare per tutti gli scopi. Basta aggiungere prima del tag di chiusura del corpo e non per aggiungere Jquery.min.js


0

La risposta di Eran è buona, ma la aggiungerei. Devi guardare qualsiasi interattività che non è in linea con l'oggetto (cioè, se un evento onclick chiama una funzione, lo farà comunque), ma se c'è qualche gestione degli eventi javascript o jQuery collegata a quell'ID, sarà sostanzialmente abbandonata :

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

Se l'ID è ora cambiato in # myID123, la funzione allegata sopra non funzionerà più correttamente dalla mia esperienza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.