Ограничение длины селектора Jquery? - PullRequest
0 голосов
/ 20 июля 2009

Я использую ASP.Net MVC, который создал идентификатор для текстового поля для объекта, который находится глубоко в моем дереве объектов следующим образом:

<input id="evt_SessionLinks[0]_Sessions[0]_TimeTables[0]_TimeWindows[0]_Finish" name="evt.SessionLinks[0].Sessions[0].TimeTables[0].TimeWindows[0].Finish" type="text" value="" class="clockPick"/>

Я пытаюсь выбрать это поле с помощью следующего селектора Jquery:

var e = $("#evt_SessionLinks[0]_Sessions[0]_TimeTables[0]_TimeWindows[0]_Finish");

Если я запускаю свой код, устанавливаю точку останова и проверяю e, как показано, переменная имеет length из 0.

Если я изменю идентификатор и селектор на id='Finish' / '#Finish'. Тогда length = 1.

Мне кажется, я пытаюсь правильно выбрать элемент? Есть ли какое-то ограничение на длину идентификатора, который может найти селектор?

Ответы [ 3 ]

2 голосов
/ 20 июля 2009

Часть «[...]» селектора интерпретируется как проверка атрибута элемента. Это превращает запрос в нечто, что никогда не будет работать.

Если у вас действительно есть квадратные скобки в вашем коде, вам нужно удалить их, чтобы использовать это. Идентификаторы типа «Area01_Section02_Line03» не редкость.

1 голос
/ 20 июля 2009

Может быть, потому что это неверный идентификатор?

Из w3c spec :

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

1 голос
/ 20 июля 2009

Я думаю, проблема в квадратных скобках, а не в длине селектора. Попробуйте экранировать квадратные скобки с помощью "\".

ОБНОВЛЕНИЕ: Согласно этой записи в блоге , вам нужно два "\", а не одно. Я сделал бы вывод, что когда JQuery его интерпретирует, в нем все еще должен быть символ «\», а обратный слеш будет сглаживаться синтаксическим анализатором JavaScript.

var e = $("#evt_SessionLinks\\[0\\]_Sessions\\[0\\]_TimeTables\\[0\\]_TimeWindows\\[0\\]_Finish");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...