属性 Attribute
标签属性和 HTML 语法非常相似,但它们的值就是普通的 JavaScript 表达式。您可以用逗号作为属性分隔符,不过不加逗号也是允许的。
(注意:本页的示例中,包含管道符号 |
的行是用于控制空格的。)
a(href='baidu.com') 百度
|
|
a(class='button' href='baidu.com') 百度
|
|
a(class='button', href='baidu.com') 百度
所有 JavaScript 表达式都能用:
//- 已登录
- var authenticated = true
body(class=authenticated ? 'authed' : 'anon')
多行属性
如果您有很多属性,您可以把它们分几行写:
input(
type='checkbox'
name='agreement'
checked
)
如果您有一个很长属性,并且您的 JavaScript 运行时引擎支持 ECMAScript 2015 模板字符串(包括 Node.js 和 io.js v1.0.0 和更新的版本),您可以使用它来写属性值:
input(data-json=`
{
"非常": "长的",
"数据": true
}
`)
用引号括起来的属性
如果您的属性名称中含有某些奇怪的字符,并且可能会与 JavaScript 语法产生冲突的话,请您将它们使用 ""
或者 ''
括起来。您还可以使用逗号来分割不同的属性。这种属性的例子有 Angular 2 中经常用到的 []
和 ()
。
//- 在这种情况下,`(click)` 会被当作函数调用而不是
//- 属性名称,这会导致一些稀奇古怪的错误。
div(class='div-class' (click)='play()')
div(class='div-class', (click)='play()')
div(class='div-class' '(click)'='play()')
属性嵌入
在 Pug / Jade 的旧版本中支持一种嵌入语法:
a(href="/#{url}") Link
这种语法 已经不再被支持! 它的相关替代可以在本文档的下面部分找到。另外请您参考我们的迁移指南以获取更多 Pug v2 与之前版本的不兼容情形。
如果您想要在您的属性当中使用变量的话,您可以这样做:
-
直接使用 JavaScript 写那个属性:
- var url = 'pug-test.html';
a(href='/' + url) 链接
|
|
- url = 'https://example.com/'
a(href=url) 另一个链接 -
如果您的 JavaScript 运行时支持 ECMAScript 2015 模板字符串(包含在 Node.js/io.js 1.0.0 以及更新的版本当中),那么您还可以使用这种方式来简化您的属性值:
- var btnType = 'info'
- var btnSize = 'lg'
button(type='button' class='btn btn-' + btnType + ' btn-' + btnSize)
|
|
button(type='button' class=`btn btn-${btnType} btn-${btnSize}`)
不转义的属性
在默认情况下,所有的属性都经过转义(即把特殊字符转换成转义序列)来防止诸如跨站脚本攻击之类的攻击方式。如果您非要使用特殊符号,您需要使用 !=
而不是 =
。
div(escaped="<code>")
div(unescaped!="<code>")
未经转义的缓存代码十分危险。您必须正确处理和过滤用户的输入来避免跨站脚本攻击。
布尔值属性
在 Pug 中,布尔值属性是经过映射的,这样布尔值(true
和 false
)就能接受了。当没有指定值的时候,默认是 true
。
input(type='checkbox' checked)
|
|
input(type='checkbox' checked=true)
|
|
input(type='checkbox' checked=false)
|
|
input(type='checkbox' checked=true.toString())
如果 doctype 是 html
的话,Pug 就不会去映射属性,而是使用缩写样式(terse style)( 所有浏览器都应该支持)。
doctype html
|
|
input(type='checkbox' checked)
|
|
input(type='checkbox' checked=true)
|
|
input(type='checkbox' checked=false)
|
|
input(type='checkbox' checked=true && 'checked')