Как выбрать элемент в jQuery, используя переменную для идентификатора? - PullRequest
95 голосов
/ 13 апреля 2009

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

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

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

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

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

Ответы [ 6 ]

177 голосов
/ 13 апреля 2009
row = $("body").find('#' + row_id);

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

row = $('#' + row_id);
44 голосов
/ 13 апреля 2009

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

$("#" + row_id)

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

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

26 голосов
/ 13 апреля 2009

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

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

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

5 голосов
/ 13 апреля 2009

Вы можете сделать это так:

row_id = 5;
row = $("body").find('#'+row_id);
1 голос
/ 13 апреля 2009

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

  1. Чтобы найти элемент по идентификатору, вы должны поставить перед ним префикс "#"
  2. Вы пытаетесь передать число в функцию поиска, когда требуется строка (передача «#» + 5 исправит это, поскольку сначала преобразует 5 в «5»)
0 голосов
/ 13 апреля 2009

Я не знаю много о jQuery, но попробуйте это:

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

Редактировать: Конечно, если переменная является числом, вы должны добавить "#" вперед:

row_id = 5
row = $("body").find("#"+row_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...