JQuery селекторы и обратные слеши - PullRequest
5 голосов
/ 29 апреля 2011

У меня есть элемент dom, который содержит полное имя как часть атрибута id;

<div id="domain\element\div">My Div</div>

Кажется, невозможно заставить jQuery выбрать элемент по ID. Вот мой эксперимент;

var $e1 = $('#domain\\\element\\\div');
var $e2 = $('#domain\\element\\div');
var $e3 = $(document.getElementById('domain\\\element\\\div'));
console.log($e1);
console.log($e2);
console.log($e3);

Выход консоли отображает первые два как пустые, в то время как третий работает;

[]
[]
<div id=​"domain\element\div">​TODO write content​</div>​

Я использую jQuery 1.5.2. Это ошибка самого JQuery или мои строки селектора неверны?

1 Ответ

17 голосов
/ 29 апреля 2011

Если вы можете изменить идентификатор в своем HTML-коде, найдите для своего идентификатора другой разделитель, кроме обратной косой черты \, чтобы вы могли создать действительный идентификатор для своего селектора (см. здесь ).Подчеркивание _ было бы хорошо.

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

$('#domain\\\\element\\\\div')

Это достигается с помощью

  1. Получение идентификатора:

    domain\element\div
    
  2. Добавление символа # и экранирование обратной косой черты для селектора:

    #domain\\element\\div
    
  3. Экранирование каждой пары обратных косых черт для использованияв строках JavaScript, удваивая их (также обратите внимание на кавычки):

    '#domain\\\\element\\\\div'
    
  4. Затем передавая строку в $(), как указано выше.

jsFiddle

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