2010-07-26 6 views
5

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

Атрибуты выбора атрибутов? т.е.

$("[attr=value]") 

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

$("#id") 

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

$(".class"); 

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

// 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]") 

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

СПАСИБО !!

ответ

3

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

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

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

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

Первые четыре очевидны, а вот пример для пятого. Имена элементов в XML могут содержать "." например, и до сих пор valid.

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

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

$(xml).find("user\\.name"); 
0

Вместо того, чтобы явно краже чужого ответа, я укажу вам на это: jQuery selector value escaping, где JQuery-х селекторный синтаксический анализ подробно описан.

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

$(document.getElementById("id.rest$of*string")); 
Смежные вопросы