是否可以为 Pug 中的每个标题生成锚点?
Is it possible to generate anchor for each heading in Pug?
我想知道是否有办法为我的每个标题生成锚点。我希望使用 Pug 实现以下目标:
h2 Some heading
加工成
<div id="some-heading">
<h2>Some heading</h2>
</div>
Pug 中有执行此操作的选项吗?
通常你会用这种东西循环数组。假设为了争论起见,它只是被称为 headings
。
- var headings = ["Heading1", "Heading2", " Heading3"];
each heading in headings
div(id= heading)
h2= heading
输出:
<div id="Heading1">
<h2>Heading1</h2>
</div>
<div id="Heading2">
<h2>Heading2</h2>
</div>
<div id="Heading3">
<h2>Heading3</h2>
</div>
要使用与标题标签不同的 ID,您可以创建一个数组 objects:
- var headings = [];
- headings.push({ "id": "heading-1", label: "Heading #1" });
- headings.push({ "id": "heading-249", label: "Heading #249" });
each heading in headings
div(id= heading.id)
h2= heading.label
输出:
<div id="heading-1">
<h2>Heading #1</h2>
</div>
<div id="heading-249">
<h2>Heading #249</h2>
</div>
当然,您不应该在哈巴狗模板中设置数组。在 node/express 路由处理程序中调用 res.render
之前,这一切都应该在路由处理程序中完成。
这是使用 mixin 和 javascript 将标题转换为 id
安全字符串的绝佳机会。
此外,您可以添加一个级别参数并使用tag name interpolation来支持多级标题。
混音:
mixin h(level, headline)
- let id = headline.toLowerCase().replace(' ', '-').replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\]\^`\{\|\}~]/g, '');
section(id= id)
#{'h' + level}= headline
if block
block
用法:
+h(2, 'Section A')
+h(2, 'Section B')
p Lorem ipsum dolor amit
+h(2, 'Section C')
p Lorem ipsum dolor amit
+h(3, 'Section C, Subsection A')
p Lorem ipsum dolor amit
编译为:
<section id="section-a">
<h2>Section A</h2>
</section>
<section id="section-b">
<h2>Section B</h2>
<p>Lorem ipsum dolor amit</p>
</section>
<section id="section-c">
<h2>Section C</h2>
<p>Lorem ipsum dolor amit</p>
<section id="section-c-subsection-a">
<h3>Section C, Subsection A</h3>
<p>Lorem ipsum dolor amit</p>
</section>
</section>
我想知道是否有办法为我的每个标题生成锚点。我希望使用 Pug 实现以下目标:
h2 Some heading
加工成
<div id="some-heading">
<h2>Some heading</h2>
</div>
Pug 中有执行此操作的选项吗?
通常你会用这种东西循环数组。假设为了争论起见,它只是被称为 headings
。
- var headings = ["Heading1", "Heading2", " Heading3"];
each heading in headings
div(id= heading)
h2= heading
输出:
<div id="Heading1">
<h2>Heading1</h2>
</div>
<div id="Heading2">
<h2>Heading2</h2>
</div>
<div id="Heading3">
<h2>Heading3</h2>
</div>
要使用与标题标签不同的 ID,您可以创建一个数组 objects:
- var headings = [];
- headings.push({ "id": "heading-1", label: "Heading #1" });
- headings.push({ "id": "heading-249", label: "Heading #249" });
each heading in headings
div(id= heading.id)
h2= heading.label
输出:
<div id="heading-1">
<h2>Heading #1</h2>
</div>
<div id="heading-249">
<h2>Heading #249</h2>
</div>
当然,您不应该在哈巴狗模板中设置数组。在 node/express 路由处理程序中调用 res.render
之前,这一切都应该在路由处理程序中完成。
这是使用 mixin 和 javascript 将标题转换为 id
安全字符串的绝佳机会。
此外,您可以添加一个级别参数并使用tag name interpolation来支持多级标题。
混音:
mixin h(level, headline)
- let id = headline.toLowerCase().replace(' ', '-').replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\]\^`\{\|\}~]/g, '');
section(id= id)
#{'h' + level}= headline
if block
block
用法:
+h(2, 'Section A')
+h(2, 'Section B')
p Lorem ipsum dolor amit
+h(2, 'Section C')
p Lorem ipsum dolor amit
+h(3, 'Section C, Subsection A')
p Lorem ipsum dolor amit
编译为:
<section id="section-a">
<h2>Section A</h2>
</section>
<section id="section-b">
<h2>Section B</h2>
<p>Lorem ipsum dolor amit</p>
</section>
<section id="section-c">
<h2>Section C</h2>
<p>Lorem ipsum dolor amit</p>
<section id="section-c-subsection-a">
<h3>Section C, Subsection A</h3>
<p>Lorem ipsum dolor amit</p>
</section>
</section>