Специальные символы в jquery - PullRequest
3 голосов
/ 13 ноября 2011

У меня есть список div, у каждого есть id.Идентификатор также выполняет функцию ссылки: "http://en.wikipedia.org/wiki/" + id - ссылка на этот элемент в Википедии, "/image/" + id + ".jpg" - локальное изображение для этого элемента.

Но у меня есть некоторый идентификатор со специальными символами.Есть два типа (которые, как я обнаружил, имеют ошибку): первый, A_(B), содержащий круглые скобки, второй A%C3%A9B (AéB), содержащий специальную букву.Я знаю, что () можно заменить на %28%29, так что это в основном только один тип.И я проверил, этот вид имени работает для изображения и ссылки на вики.

Проблема в том, что когда я использую jQuery, $('#' + id) не может найти эти объекты со специальными буквами.У кого-нибудь есть идеи, как с этим бороться?

Ответы [ 4 ]

2 голосов
/ 13 ноября 2011

Если вы посмотрите на второй абзац страницы селекторов , он показывает, что эти символы !"#$%&'()*+,./:;<=>?@[\]^``{|}~ должны быть экранированы при использовании.

Но если вы включаете другие символы, возможно, лучше использовать их escape-код, чтобы включить их ( компилятор Google Closure автоматически сделает это за вас). Так что это письмо é можно заменить на \u00e9

1 голос
/ 13 ноября 2011

Вы пробовали:

var id = encodeURIComponent(id);
$('#' + id);

, чтобы посмотреть, разрешит ли это?

0 голосов
/ 13 ноября 2011

Хорошее практическое правило - сначала соответствовать соответствующим спецификациям.Согласно HTML 4.01 :

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

Значения символов ((,) и% не допускаются в идентификаторах или именах элементов.

Несоответствующие символы в идентификаторах могут вызывать проблемы, отличные от jQuery.Использование encodeURIComponent (например, для замены (на% 28) не помогает, так как символ% также недопустим. Но вы можете избежать неприятностей с символьными объектами для букв вне типичного диапазона az, AZ илиВы можете просто использовать старый document.getElementById , и если вам действительно нужно использовать jQuery:

$(document.getElementById(id))

может быть достаточно (но не надежно).

0 голосов
/ 13 ноября 2011

См. этот вопрос для получения дополнительной информации.

Лично я считаю, что идентификаторы должны соответствовать легко читаемым и понятным идентификаторам. Попробуйте добавить URL-адреса с помощью другого механизма, такого как jQuery $.data, или другого свойства, для которого нет ограничений по допустимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...