Как выбрать элемент в 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]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").

Паоло Бергантино
источник
6

Сделать это можно так:

row_id = 5;
row = $("body").find('#'+row_id);
Амр Элгархи
источник
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);
Зифре
источник