Это задокументировано в Документах по jQuery Selectors :
Для использования любых метасимволов (таких как
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
) как буквальная часть имени, оно должно
с двумя обратными слешами: \\
. Например, элемент с
id="foo.bar"
, можно использовать селектор $("#foo\\.bar")
.
Короче, префикс .
с \\
выглядит следующим образом:
$("#Address\\.Country")
Почему .
не работает в моем удостоверении личности?
Проблема в том, что .
имеет особое значение, следующая строка интерпретируется как селектор класса. Так что $('#Address.Country')
будет соответствовать <div id="Address" class="Country">
.
Если экранировать как \\.
, точка будет рассматриваться как обычный текст без особого значения, соответствующий желаемому идентификатору <div id="Address.Country">
.
Это относится ко всем символам !"#$%&'()*+,./:;<=>?@[\]^`{|}~
, которые в противном случае имели бы особое значение как селектор в jQuery. Просто добавьте \\
, чтобы обработать их как обычный текст.
Почему 2 \\
?
Как отмечается в ответе bdukes, есть причина, по которой нам нужно 2 \
символов. \
экранирует следующий символ в JavaScript. Например, когда JavaScript интерпретирует строку "#Address\.Country"
, он увидит \
, интерпретирует его как значение , принимает следующий символ буквально и удаляет , когда строка передается как аргумент $()
. Это означает, что jQuery по-прежнему будет видеть строку как "#Address.Country"
.
Вот тут и начинает играть второй \
. Первый говорит JavaScript интерпретировать второй как буквенный (не специальный) символ. Это означает, что второй будет замечен jQuery и поймет, что следующий символ .
является буквенным символом.
Уф! Может быть, мы можем это визуализировать.
// Javascript, the following \ is not special.
// |
// |
// v
$("#Address\\.Country");
// ^
// |
// |
// jQuery, the following . is not special.