标记选择器语法

Thymeleaf 的标记选择器语法可直接查看Thymeleaf 的解析库AttoParser

该选择器的语法与XPath、CSS和jQuery 的选择器的语法相似,这使得它们易于被大多数用户所理解。你可以有看看完整的语法参考 [AttoParser文档](http://www.attoparser.org/apidocs/attoparser/2.0.0.RELEASE/org/attoparser/select/package-summary.html)。

例如,以下选择器将选择每个 class 是 content<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

  • 只要包含参数的规范,允许使用没有元素名称/引用的选择器。所以[@class='oneclass']是一个有效的选择器,用于查找具有值"oneclass"的类属性的任何元素(标签)。

高级属性选择功能:

  • 除了=(等于),其他比较运算符也是有效的: !=(不等于),^=(开始)和$= (以结尾)。例如:`x[@class^='section']``表示名称为“x”的元素,以“section”开头的属性“class”的值。

  • 属性可以以“@”(XPath样式)开头和不以之开头(jQuery样式)指定。所以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 表示 <x>标签有一个th:ref="oneref"th:fragment="oneref"属性

  • %oneref 表示任何有th:ref="oneref"th:fragment="oneref"属性的标签。这实际上等同于简单的oneref,因为可以使用引用而不是元素名称。

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

所以上面的 Markup Selector表达式:

<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引用)。 但是,如果它们存在(它们不是在HTML中)也会查找名称为myfrag的标签。 注意区别:

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

它将实际上寻找任何具有class="myfrag"的元素,而不用关心th:fragment签名(或 th:ref 引用)。

多值类匹配

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

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

results matching ""

    No results matching ""