Когда мне нужно избегать мета-символов?(Селекторы jQuery) - PullRequest
5 голосов
/ 26 июля 2010

Согласно документам jQuery, мне нужно экранировать метасимволы, которые встречаются в моих строках селектора, когда они встречаются в виде литерала.Тем не менее, я не смог найти очень много конкретных примеров того, когда и когда не избегать селекторов.Так когда и когда мне не нужно экранировать метасимволы, когда они должны интерпретироваться как литерал в:

Селекторах атрибутов?то есть

$("[attr=value]")

Id селекторы?т.е.

$("#id")

Селекторы класса?т.е.

$(".class");

И есть ли способ написать функцию, которая заменяет метасхемы в строках селектора, сохраняя при этом начальный символ?то есть:

// replace all meta chars, preserving the id selection?
$("#id.rest$of*string")

// replace all meta chars, preserving the attribute selection?
// going back to my previous question, do I even need to escape the metachars in this situation?
$("[attr=blah.dee#foo*yay]")

Причина, по которой я задаю этот вопрос, заключается в том, что я работаю с веб-сайтом, на котором, как оказалось, есть несколько действительно неприятных селекторов.И у меня нет контроля над сайтом, поэтому я не могу изменить селекторы, чтобы с ними было удобнее работать.

СПАСИБО !!

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

Из документов jQuery:

Если вы хотите использовать любой из метасимволов (#; &,. + * ~ ': "! ^ $ => | /) как буквальная часть имени , вы должны экранировать персонажа с двумя обратными слешами ...

Все из них должны быть экранированы:

  1. id
  2. имя класса
  3. имя атрибута
  4. значение атрибута
  5. имя элемента

Первые четыре очевидны, и вот примердля пятого. Имена элементов в XML могут содержать, например, символ «.» и все равно быть действительными .

<user.name>John Doe</user.name>

Если вам нужно было выбрать все элементы user.name, точто . необходимо экранировать

$(xml).find("user\\.name");
0 голосов
/ 26 июля 2010

Вместо того, чтобы воровать чужой ответ, я укажу на него: Значение селектора jQuery, выходящее за пределы , где метод синтаксического анализа селектора jQuery подробно описан.

Краткий ответ: у вас могут быть проблемы, так как синтаксический анализатор выбора jQuery не является 100% жалобой на стандарты. Согласно предложению в связанном ответе, вы можете обойти эту проблему, вызвав обычные методы DOM (document.getElementById()), которые будут работать с забавными селекторами, а затем передать необработанный элемент DOM селектору jQuery.

$(document.getElementById("id.rest$of*string"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...