开发学院

您的位置:首页>教程>正文

教程正文

Thymeleaf 3.0教程:20 附录C:标记选择器语法

  Thymeleaf的标记选择器直接从Thymeleaf的AttoParser解析库中借用。

  这个选择器的语法与XPath、CSS和jQuery中的选择器有很大的相似性,这使得它们对于大多数用户来说都很容易使用。您可以在AttoParser文档中查看完整的语法参考。

  例如,以下选择器将在标记内的每个位置选择包含类内容的每个<div>(注意,这并不尽如人意,请继续阅读以了解原因):

<div th:insert="mytemplate :: //div[@class='content']">...</div>

  基本语法包括:

  /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的元素和以section开头的属性值。

  属性既可以以@ (XPath样式)开头,也可以不以(jQuery样式)开头。所以x[z='v']相当于x[@z='v']。

  多属性修饰符可以用和(XPath样式)连接,也可以通过链接多个修饰符(jQuery样式)连接。所以x[@z1='v1 '和@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 "属性的< x >标记。

  %oneref是指任何具有th:ref="oneref "或th:fragment="oneref "属性的标签。注意,这实际上相当于简单的一个引用,因为引用可以用来代替元素名。

  直接选择器和属性选择器可以混合使用:a.external[@href^='https'].

  所以上面的标记选择器表达式:

<div th:insert="mytemplate :: //div[@class='content']">...</div>

  可以写成:

<div th:insert="mytemplate :: div.content">...</div>

  考察一个不同的例子,这:

<div th:replace="mytemplate :: myfrag">...</div>

  将寻找th:fragment="myfrag "片段签名(或th:ref references)。但是如果标签存在的话,我也会寻找名为myfrag的标签。请注意与以下内容的区别:

<div th:replace="mytemplate :: .myfrag">...</div>

  它将实际上使用class="myfrag "查找任何元素,而不考虑th:片段签名(或th:ref引用)。

多值类匹配

  标记选择器将类属性理解为多值的,因此即使元素有几个类值,也允许在该属性上应用选择器。

  例如,div.two将匹配<div class="one two three" />