Как выбрать элемент в jQuery, используя переменную для идентификатора?


100

Например, следующее выбирает раздел с id = "2":

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

Как мне сделать что-то вроде этого:

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

Приведенный выше синтаксис вызывает ошибку. Я безуспешно проверил документацию jQuery и ответил здесь.


6
Ух ты, пять абсолютно одинаковых ответов ...
Зифре,

Ответы:


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

Что еще более важно, выполнение дополнительного body.find не влияет на производительность. Правильный способ сделать это просто:

row = $('#' + row_id);

46

Самый короткий путь:

$("#" + row_id)

Ограничение поиска телом не приносит никакой пользы.

Кроме того, вам следует подумать о переименовании вашего ids во что-то более значимое (и совместимое с HTML в соответствии с ответом Паоло), особенно если у вас есть другой набор данных, который также необходимо назвать.


Мне нравится лаконичность. Я просто использовал это с подсказками qTip2, отлично работает. Мне немного любопытно, какова потеря производительности за создание многих из них «точно в срок», например, в ответ на ввод пользователя.
PJ Brunet

26

$('body').find();При поиске по ID делать не нужно; прироста производительности нет.

Также обратите внимание, что идентификатор, начинающийся с числа, не является допустимым HTML :

Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").



1

В вашем коде есть две проблемы

  1. Чтобы найти элемент по ID, вы должны поставить перед ним префикс "#".
  2. Вы пытаетесь передать Number функции поиска, когда требуется String (передача "#" + 5 исправит это, так как сначала будет преобразовано 5 в 5)

0

Я мало что знаю о jQuery, но попробуйте следующее:

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

Изменить: Конечно, если переменная является числом, вам нужно добавить "#"вперед:

row_id = 5
row = $("body").find("#"+row_id);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.