Учебник Thymeleaf: Глава 20. Приложение C: Синтаксис селектора разметки

habr.png

Оглавление

20 Приложение C: Синтаксис селектора разметки


Селекторы разметки Thymeleaf напрямую заимствованы из библиотеки парсера Thymeleaf: AttoParser.

Синтаксис для этих селекторов имеет большое сходство с синтаксисом селекторов в XPath, CSS и jQuery, что делает их удобными для большинства пользователей. Вы можете взглянуть на полную ссылку на синтаксис в документации AttoParser.

Например, следующий селектор будет выбирать каждый

с содержимым класса в каждой позиции внутри разметки (обратите внимание, что это не так лаконично, как могло бы быть, читайте далее, чтобы знать почему):

...


Основной синтаксис включает:

  • /x означает прямые дочерние элементы текущего узла с именем x
  • //x означает дочерние элементы текущего узла с именем x на любой глубине
  • x[@z=«v»] означает элементы с именем x и атрибутом z со значением «v»
  • x[@z1=«v1» and @z2=«v2»] означает элементы с именем x и атрибутами z1 и z2 со значениями «v1» и «v2» соответственно
  • x[i] означает элемент с именем x, расположенный в числе i среди его братьев и сестер
  • x[@z=«v»][i] означает элементы с именем x, атрибут z со значением «v» и помещены в число i среди его братьев и сестер, которые также соответствуют этому условию


Но можно использовать более сжатый синтаксис:

  • x точно эквивалентен //x (поиск элемента с именем или ссылкой x на любом уровне глубины, ссылка — атрибут th: ref или th: fragment)
  • Селекторы также разрешены без имени элемента / ссылки, если они содержат спецификацию аргументов. Таким образом, [@class='oneclass'] является допустимым селектором, который ищет любые элементы (теги) с атрибутом класса со значением »oneclass»


Расширенные функции выбора атрибутов:

  • Кроме = (равно), действуют и другие операторы сравнения: != (Не равно), ^= (начинается с) и $= (заканчивается). Например: x[@class^='section'] означает элементы с именем x и значение класса атрибута, которое начинается с раздела
  • Атрибуты могут быть указаны как начиная с @ (стиль XPath), так и без (jQuery-style). Итак, x[z='v'] эквивалентно x[@z='v']
  • Модификаторы с несколькими атрибутами можно объединить как с and (в стиле XPath), так и путем объединения нескольких модификаторов (стиль jQuery). Таким образом, x[@z1='v1' and @z2='v2'] фактически эквивалентно x[@z1='v1'][@z2='v2'] (а также к x[z1='v1'][z2='v2'])


Прямые селектора типа jQuery:

  • x.oneclass эквивалентен x[class='oneclass']
  • .oneclass эквивалентен [class='oneclass']
  • x#oneid эквивалентен x[id='oneid']
  • #oneid эквивалентен [id='oneid']
  • x%oneref означает теги , которые имеют атрибут th: ref=«oneref» или th: fragment=«oneref»
  • Прямые селектора и селектора атрибутов могут быть смешаны: a.external[@href^='https']


Таким образом, выражение Markup Selector выше:

...


Может быть написано как:

...


Изучив другой пример, выполните следующие действия:

...


Будет искать фрагмент фрагмента th: fragment=«myfrag» (или th: ref ссылки). Но также искали бы теги с именем myfrag, если бы они существовали (чего нет в HTML).

Обратите внимание на разницу с:

...


… который фактически будет искать любые элементы с class=«myfrag», не заботясь о сигнатурах: th: fragment (или th: ref).

Многозначное сопоставление классов

Селекторы разметки понимают, что атрибут класса является многозначным (multivalued), и поэтому разрешает применение селекторов по этому атрибуту, даже если элемент имеет несколько значений класса.

Например, div.two будет соответствовать

© Habrahabr.ru