Wie wähle ich ein Element in jQuery aus, indem ich eine Variable für die ID verwende?

100

Im Folgenden wird beispielsweise eine Division mit der ID = "2" ausgewählt:

row = $("body").find("#2");

Wie mache ich so etwas:

row_id = 5;
row = $("body").find(row_id);

Die obige Syntax erzeugt einen Fehler. Ich habe die jQuery-Dokumentation überprüft und hier ohne Erfolg geantwortet.

Tony
quelle
6
Wow, fünf Antworten, die genau gleich sind ...
Zifre

Antworten:

189
row = $("body").find('#' + row_id);

Noch wichtiger ist, dass der zusätzliche body.find keinen Einfluss auf die Leistung hat. Der richtige Weg, dies zu tun, ist einfach:

row = $('#' + row_id);
Rick Hochstetler
quelle
46

Der kürzeste Weg wäre:

$("#" + row_id)

Die Suche auf den Körper zu beschränken, hat keinen Vorteil.

Sie sollten auch in Betracht ziehen, Ihr ids in etwas Sinnvolleres umzubenennen (und HTML-konform gemäß Paolos Antwort), insbesondere wenn Sie einen anderen Datensatz haben, der ebenfalls benannt werden muss.

John Rasch
quelle
Ich mag prägnant. Ich habe dies gerade mit qTip2-Tooltips verwendet, funktioniert großartig. Ich bin ein wenig neugierig, was der Leistungsverlust ist, wenn viele dieser "just in time" generiert werden, beispielsweise als Reaktion auf Benutzereingaben.
PJ Brunet
26

Dies $('body').find();ist nicht erforderlich, wenn Sie nach einem Ausweis suchen. Es gibt keinen Leistungsgewinn.

Bitte beachten Sie auch, dass eine ID, die mit einer Nummer beginnt, kein gültiger HTML-Code ist :

ID- und NAME-Token müssen mit einem Buchstaben ([A-Za-z]) beginnen und können von einer beliebigen Anzahl von Buchstaben, Ziffern ([0-9]), Bindestrichen ("-") und Unterstrichen ("_") gefolgt werden. , Doppelpunkte (":") und Punkte (".").

Paolo Bergantino
quelle
6

Sie können es so machen:

row_id = 5;
row = $("body").find('#'+row_id);
Amr Elgarhy
quelle
1

Es gibt zwei Probleme mit Ihrem Code

  1. Um ein Element anhand seiner ID zu finden, müssen Sie ihm ein "#" voranstellen.
  2. Sie versuchen, eine Zahl an die Suchfunktion zu übergeben, wenn ein String erforderlich ist (das Übergeben von "#" + 5 würde dies beheben, da die 5 zuerst in eine "5" konvertiert wird).
Bert Lamb
quelle
0

Ich weiß nicht viel über jQuery, aber versuchen Sie Folgendes:

row_id = "#5";
row = $("body").find(row_id);

Bearbeiten: Wenn die Variable eine Zahl ist, müssen Sie natürlich "#"vorne hinzufügen :

row_id = 5
row = $("body").find("#"+row_id);
Zifre
quelle