Ändern der ID eines Elements mit jQuery


302

Ich muss die ID eines Elements mit jQuery ändern.

Anscheinend funktionieren diese nicht:

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

Ich habe herausgefunden, dass ich es mit dem folgenden Code schaffen kann:

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

Aber das scheint mir nicht richtig zu sein. Es muss einen besseren Weg geben, nein? Falls nicht, welche andere Methode kann ich anstelle von Ein- / Ausblenden oder anderen Effekten verwenden? Natürlich möchte ich das Element nicht jedes Mal ein- / ausblenden oder beeinflussen, nur um seine ID zu ändern.

(Ja, ich bin ein jQuery-Neuling.)

Bearbeiten
Ich kann in diesem Fall keine Klassen verwenden, ich muss IDs verwenden.


5
In JavaScript können Sie einer Variablen ( foo = 1), einem Mitglied eines Objekts ( foo.bar = 2oder foo['bar'] = 2) oder einem Array-Index ( foo[0] = 3) zuweisen, aber einem Ausdruck wie dem Ergebnis eines Operators ( (x + b) = 5) oder dem Ergebnis eines Funktionsaufrufs ( foo() = 1, ) zuweisen foo(x).bar(y) = 7) macht keinen Sinn, daher wird es definitiv nicht so sein, wie es in jQuery oder einer anderen JavaScript-Bibliothek funktioniert.
Rakslice

Antworten:


521

Ihre Syntax ist falsch, Sie sollten den Wert als zweiten Parameter übergeben:

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

4
Ich denke, newId sollte in Anführungszeichen stehen
Jay Corbett

5
Müssen Sie das Element nicht vom DOM trennen und durch ein neues Element mit einer neuen ID ersetzen? Um das DOM nicht zu beschädigen ...?
Cllpse

15
jQuery kümmert sich darum, Hahnsäure.
McPherrinM

15
hier angekommen doppelt überprüfen ID Neuzuweisung - sollte dies jetzt .prop( ... )statt sein .attr( ... )?
Carl

2
@Carl sollte nach den neuesten jquery-Dokumenten und -Beispielen idweiterhin mitattr(...)
JoeBrockhaus

71

Eine BEVORZUGTE OPTION .attrist .propwie folgt zu verwenden :

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

.attrRuft das Attribut des Elements ab, während .propdie Eigenschaft abgerufen wird, auf die das Attribut verweist (dh was Sie tatsächlich ändern möchten).


4
.attr ist veraltet - dies ist die richtige Vorgehensweise.
PointlessSpike

7
Woher kommen diese Informationen? api.jquery.com/attr sagt nichts über Abwertung ...
Sergej

Es ist nicht veraltet. " Ab jQuery 1.6 bietet die .prop()Methode eine Möglichkeit, Eigenschaftswerte explizit abzurufen und .attr()Attribute abzurufen."
Illuminator

@Illuminator Ich habe meine Antwort entsprechend korrigiert. Vielen Dank.
Jeremy Moritz

45

Was Sie tun wollen, ist:

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

Dadurch wird die ID auf die neue ID gesetzt


11

Ich habe etwas Ähnliches mit diesem Konstrukt gemacht

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

7

Ich bin mir nicht sicher, was Ihr Ziel ist, aber könnte es besser sein, stattdessen addClass zu verwenden? Ich meine, eine Objekt-ID sollte meiner Meinung nach statisch und spezifisch für dieses Objekt sein. Wenn Sie nur versuchen, die Anzeige auf der Seite oder so etwas zu ändern, würde ich diese Details in eine Klasse einfügen und sie dann dem Objekt hinzufügen, anstatt zu versuchen, die ID zu ändern. Wiederum sage ich das, ohne Ihr unterstrichenes Ziel zu verstehen.


3
die Freuden älterer Systeme - ich verstehe dann Ihren Schmerz. Eran Antwort ist dann definitiv die beste.
Tim Knight

5
Das Festlegen der ID ist nützlich und sinnvoll, wenn Sie das DOM erstellen, indem Sie versteckte Vorlagen im HTML-Code verwenden und diese dann mit jquery klonen.
Steve Knight


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

Dies könnte für alle Zwecke tun. Fügen Sie einfach vor Ihrem Body Closing Tag hinzu und dürfen Sie Jquery.min.js nicht hinzufügen


0

Erans Antwort ist gut, aber ich würde das anhängen. Sie müssen jede Interaktivität beobachten, die nicht inline zum Objekt ist (dh wenn ein Onclick-Ereignis eine Funktion aufruft, wird dies immer noch der Fall sein). Wenn dieser ID jedoch eine Javascript- oder jQuery-Ereignisbehandlung zugeordnet ist, wird sie grundsätzlich abgebrochen ::

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

Wenn die ID jetzt in # myID123 geändert wird, funktioniert die oben angehängte Funktion meiner Erfahrung nach nicht mehr richtig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.