属性
タグの属性はHTMLに似ていますが(オプションでカンマ区切りも可能)、その値は通常のJavaScriptです。
(注:このページの例では、空白制御のためにパイプ文字(|
)を使用しています。)
通常のJavaScript式も問題なく使えます。
複数行属性
属性がたくさんある場合は、複数行に分けて記述することもできます。
JavaScriptランタイムがES2015 テンプレートリテラル(Node.js/io.js 1.0.0以降を含む)をサポートしている場合は、属性にその構文を使用できます。これは、非常に長い値を持つ属性に非常に役立ちます。
引用符付き属性
属性名にJavaScriptの構文を妨げる可能性のある奇妙な文字が含まれている場合は、""
または''
で囲むか、カンマで区切って異なる属性を分離します。このような文字の例として、[]
や()
(Angular 2で頻繁に使用される)があります。
属性のインターポレーション
注意
以前のバージョンのPug/Jadeでは、次のようなインターポレーション構文をサポートしていました。
a(href="/#{url}") Link
この構文はサポートされなくなりました。代替案は以下にあります。(Pug v2と以前のバージョン間のその他の非互換性については、移行ガイドを参照してください。)
属性に変数を含めるために使用できる代替案をいくつか紹介します。
-
属性をJavaScriptで記述するだけです。
-
JavaScriptランタイムがES2015 テンプレートリテラル(Node.js/io.js 1.0.0以降を含む)をサポートしている場合は、その構文を使用して属性を簡略化することもできます。
エスケープされていない属性
デフォルトでは、すべての属性はエスケープされます。つまり、クロスサイトスクリプティングなどの攻撃を防ぐために、特殊文字はエスケープシーケンスに置き換えられます。特殊文字を使用する必要がある場合は、=
の代わりに!=
を使用してください。
注意
エスケープされていないバッファ付きコードは危険な場合があります。クロスサイトスクリプティングを回避するために、ユーザー入力をサニタイズするようにしてください。
ブール属性
ブール属性はPugによってミラーリングされます。ブール値(true
とfalse
)が受け入れられます。値が指定されていない場合は、true
が想定されます。
doctypeがhtml
の場合、Pugは属性をミラーリングしないことを認識し、代わりに(すべてのブラウザで理解される)簡潔なスタイルを使用します。
スタイル属性
style
属性は、通常の属性と同様に文字列にすることができますが、JavaScriptでスタイルが生成される場合に便利なオブジェクトにすることもできます。
クラス属性
class
属性は、通常の属性と同様に文字列にすることができますが、JavaScriptから生成する場合に便利なクラス名の配列にすることもできます。
また、クラス名をtrue
またはfalse
の値にマッピングするオブジェクトにすることもできます。これは条件付きクラスを適用する場合に便利です。
クラスリテラル
クラスは、.classname
構文を使用して定義できます。
div
はタグとして非常に一般的な選択肢であるため、タグ名を省略するとデフォルトになります。
IDリテラル
IDは、#idname
構文を使用して定義できます。
div
はタグとして非常に一般的な選択肢であるため、タグ名を省略するとデフォルトになります。
&attributes
「and attributes」と発音される&attributes
構文を使用すると、オブジェクトを要素の属性に展開できます。
上記の例では、オブジェクトリテラルを使用しています。ただし、値がオブジェクトである変数を使用することもできます。(参照:Mixin属性)。
注意
&attributes
を使用して適用された属性は、自動的にエスケープされません。クロスサイトスクリプティング(XSS)を回避するために、ユーザー入力をサニタイズする必要があります。mixin呼び出しからattributes
を渡す場合、これは自動的に行われます。