Jak wybrać element w jQuery przy użyciu zmiennej dla identyfikatora?

100

Na przykład następujące elementy wybierają podział z id = "2":

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

Jak zrobić coś takiego:

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

Powyższa składnia powoduje błąd. Sprawdziłem dokumentację jQuery i odpowiedzi tutaj bez powodzenia.

Tony
źródło
6
Wow, pięć odpowiedzi, które są dokładnie takie same ...
Zifre

Odpowiedzi:

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

Co ważniejsze, wykonanie dodatkowego body.find nie ma wpływu na wydajność. Właściwy sposób na zrobienie tego to po prostu:

row = $('#' + row_id);
Rick Hochstetler
źródło
46

Najkrótszym sposobem byłoby:

$("#" + row_id)

Ograniczenie poszukiwań do ciała nie przynosi żadnych korzyści.

Powinieneś także rozważyć zmianę nazwy swoich idplików na coś bardziej znaczącego (i zgodnego z HTML, zgodnie z odpowiedzią Paolo), zwłaszcza jeśli masz inny zestaw danych, który również musi zostać nazwany.

John Rasch
źródło
Lubię zwięzłość. Właśnie użyłem tego z podpowiedziami qTip2, działa świetnie. Jestem trochę ciekawy, jaka jest obniżka wydajności w przypadku generowania ich dużej ilości „na czas”, na przykład w odpowiedzi na dane wejściowe użytkownika.
PJ Brunet
26

Robi $('body').find();nie jest konieczne, gdy patrząc przez ID; nie ma wzrostu wydajności.

Należy również pamiętać, że posiadanie identyfikatora rozpoczynającego się od numeru nie jest prawidłowym kodem HTML :

Tokeny ID i NAZWA muszą zaczynać się od litery ([A-Za-z]) i mogą po nich następować dowolne litery, cyfry ([0-9]), łączniki („-”), podkreślenia („_”) , dwukropki („:”) i kropki („.”).

Paolo Bergantino
źródło
6

Możesz to zrobić w ten sposób:

row_id = 5;
row = $("body").find('#'+row_id);
Amr Elgarhy
źródło
1

Z twoim kodem są dwa problemy

  1. Aby znaleźć element według identyfikatora, musisz poprzedzić go znakiem „#”
  2. Próbujesz przekazać liczbę do funkcji wyszukiwania, gdy wymagany jest ciąg (przekazanie „#” + 5 rozwiązałoby ten problem, ponieważ najpierw przekształciłoby 5 na „5”)
Bert Lamb
źródło
0

Nie wiem zbyt wiele o jQuery, ale spróbuj tego:

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

Edycja: Oczywiście, jeśli zmienna jest liczbą, musisz dodać "#"na początek:

row_id = 5
row = $("body").find("#"+row_id);
Zifre
źródło