Если мой HTML выглядит так:
<td class="controlCell">
<input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
Как я могу выбрать # SearchBag.CompanyName с JQuery? Я не могу заставить это работать, и я боюсь, что это - точка, которая ломает все это. Раздражает то, что переименование всех моих идентификаторов будет большой работой, не говоря уже о потере читабельности.
Примечание:
пожалуйста, давайте не будем говорить о том, как таблицы не созданы для разметки. Я прекрасно осознаю ценность и недостатки CSS и стараюсь максимально использовать его.
Ответы:
@ Томалак в комментариях:
«# Id.class» - допустимый селектор, для которого требуется соответствие как идентификатора, так и отдельного класса; это действительно и не всегда полностью избыточно.
Правильный способ выбора литерала "." в CSS это избежать: «#id \ .moreid». Раньше это вызывало проблемы в некоторых старых браузерах (в частности, IE5.x), но все современные браузеры для настольных компьютеров поддерживают его.
Похоже, что тот же метод работает в jQuery 1.3.2, хотя я не проверял его полностью; quickExpr не подхватывает его, но более сложный синтаксический анализатор выбора, кажется, делает это правильно:
источник
$('[id="profile.birthdate"]')
Один вариант будет таким:
источник
Вам не нужно ничего избегать, если вы используете
document.getElementById
:getElementById
предполагается, что входные данные являются просто атрибутом id, поэтому точка не будет интерпретироваться как селектор класса.источник
Краткий ответ : если у вас есть элемент с id =
"foo.bar"
, вы можете использовать селектор$("#foo\\.bar")
Более длинный ответ : это часть документации jquery - селекторы разделов, которые вы можете найти здесь: http://api.jquery.com/category/selectors/
На ваш вопрос ответят в самом начале документации:
источник
Выбор attr кажется подходящим, когда ваш идентификатор находится в переменной:
источник
Это задокументировано в API селекторов jQuery :
Короче, префикс
.
с\\
.Проблема в том, что
.
будет соответствовать класс, поэтому$('#SearchBag.CompanyName')
будет соответствовать<div id="SearchBag" class="CompanyName">
. Экранированный символ\\.
будет рассматриваться как обычный,.
без особого значения, соответствующего желаемому идентификатору.Это относится ко всем символам,
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
которые в противном случае имели бы особое значение как селектор в jQuery.источник
Ребята, которые ищут более общее решение, я нашел одно решение, которое вставляет одну обратную косую черту перед любыми специальными символами, это решает проблемы, связанные с получением имени и идентификатора из div, который содержит специальные символы.
Надеюсь, это полезно!
источник
Вы можете использовать селектор атрибута:
Или вы можете указать тип элемента:
источник