Подтвердить что ты не робот

Почему этот селектор jquery не работает с периодом работы

У меня есть div с идентификатором

<div id="updates-pane-user.followed_on">

этот селектор jquery работает

$("[id^='updates-pane']")

но это не

$("#updates-pane-user.followed_on")

Я не вижу, что не так. Идентификаторы имен могут включать периоды вправо? Мне что-то не хватает?

4b9b3361

Ответ 1

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

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

$("#updates-pane-user\\.followed_on")

В соответствии с документами jQuery:

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

В общем, попробуйте не использовать периоды или другие специальные символы в своих идентификаторах, чтобы избежать путаницы. "Разрешено" - это не то же самое, что "хорошая практика".

Ответ 2

Да, HTML5 позволяет использовать период в id, но jQuery не создан w3 org. Это просто библиотека утилиты, оптимизированная для наиболее распространенных случаев.

Если ваш идентификатор имеет период или любой другой символ, делающий jQuery синтаксическим анализом, это больше, чем просто идентификатор, тогда вам лучше использовать стандартную функцию:

$(document.getElementById(yourId))

Это предпочтительное решение, если ваш идентификатор принадлежит переменной.

Ответ 3

$("#updates-pane-user\\.followed_on") - Это должно работать согласно Документация JQuery

// Does not work
 $("#some:id")

 // Works!
 $("#some\\:id")

 // Does not work
 $("#some.id")

 // Works!
 $("#some\\.id")

Ответ 4

Из-за точки в атрибуте id, который в синтаксисе jQuery представляет селектор классов. Этот селектор эквивалентен выбору node как:

<div id="updates-pane-user" class="followed_on">

Ответ 5

Поскольку селектор . считает, что существует класс со следующим именем

$("#updates-pane-user.followed_on")

означает: найти все элементы с id = updates-pane-user, которые имеют имя класса followed_on

Ответ 7

В течение определенного периода времени создается проблема для JQuery для распознавания шаблона.

jQuery имеет три типа селекторов:

  • "." Селектор означает выбор элемента по имени класса.
  • "#" Селектор означает выбор элемента по идентификатору.
  • И селектор элементов, который выбирает элементы по их имени (div, input и др.)

И вы путаете jQuery engine с вашим соглашением именования идентификатора.

Предполагая, что существует div с id="updates-pane-user" и применяется class="followed_on". В таких случаях jQuery предлагают избежать последовательности, используя //. Ниже должен быть ваш syntex для выбора элемента.

$("#updates-pane-user\\.followed_on");

Проверьте эту неправильную скрипту и попробуйте исправить с помощью //: http://jsfiddle.net/ukJ8Z/

Ура!!

Ответ 8

да Ответ Jimbo правильный, но вы все равно можете сделать эту работу с экранирующим символом с помощью \\

$("#updates-pane-user\\.followed_on")

Побег с двумя обратными косыми чертами (2).

Отметьте ссылку для How do I select an element by an ID that has characters used in CSS notation?

Ответ 9

Вы также можете использовать селектор атрибутов id, например:

$('[id="updates-pane-user.followed_on"]')

потому что jQuery будет рассматривать атрибут как строку, а не селектор класса jQuery.