Jekyll - 如何避免在 YAML frontmatter markdownify 项目上添加段落
Jekyll - How can I make avoid a paragraph to be added on a YAML frontmatter markdownify item
好的...我有一个项目,我在其中使用 Jekyll 进行播客项目。我选择通过 YAML Front Matter 项目在 shownotes 中列出主机:
hosts:
- Name A
- Name B
- Name C
使用这段代码
<li> <strong>Hosts:</strong>
<ul>
{% for host in page.hosts %}
<li>{{ host }}
{% endfor %}
</ul>
我收到了正确的列表
<ul>
<li> <strong>Hosts:</strong>
<ul>
<li>Name A </li>
<li>Name B </li>
<li>Name C </li>
</ul>
</ul>
但是,我想通过
来降价
<li> <strong>Hosts:</strong>
<ul>
{% for host in page.hosts %}
<li>{{ host | markdownify }}
{% endfor %}
</ul>
但是 Jekyll returns:
<ul>
<li> <strong>Hosts:</strong>
<ul>
<li><p>Name A </p></li>
<li><p>Name B </p></li>
<li><p>Name C </p></li>
</ul>
</ul>
有什么方法可以禁止 Jekyll 将 <p>
标签添加到列表项中?实际上,如果我想添加任何丰富的格式,我需要将 HTML 直接放入项目中,但我想通过 Markdown'ing Front Matter 文本来添加它。有什么建议吗?
PS: 我的网站托管在 Github 页数
您可以像这样使用 remove filter :
{{ host | markdownify | remove: '<p>' | remove: '</p>' }}
好吧...这是个很老的问题,但仍然很现实。
您可以像以前使用 一样使用 | remove: '<p>' | remove: '</p>'
。但它会删除文本中的每个 <p>
标记。
但是如果您只想在只有一个 <p>
节点的情况下删除 <p>
标签包装,您将需要更复杂的解决方案。
如果没有外部插件和过滤器,几乎没有办法做到这一点。
这是我的解决方案:
{%- assign arr = yourTextVar | markdownify | strip | split: "<p>" -%}
{%- if arr.size > 2 -%}
{{ arr | join: "<p>" | prepend: "<p>" }}
{%- else -%}
{{ arr[1] | remove: "</p>" }}
{%- endif -%}
它将拆分空 <p>
标签上的文本,并会忽略 <p id="my-id">
之类的内容
使用 md.renderInline() 删除 <p>
标签
我“杀死”<p>
和 </p>
失败了。
所以我在 p 元素中添加了一个 css-class,例如.handle-as-span
,然后我可以用 css“操纵”p 元素(从块更改为内联)。
{: .handle-as-span }
![Image Alt Tag](path/to/image)
它也应该适用于 markdown 中的列表/表格。我了解到 {: .handle-as-span }
有时需要放在块之前,有时需要放在块之后。试试吧。它仍然很难看,但至少我的设计没有被破坏。
p.handle-as-span {
display: inline;
}
好的...我有一个项目,我在其中使用 Jekyll 进行播客项目。我选择通过 YAML Front Matter 项目在 shownotes 中列出主机:
hosts:
- Name A
- Name B
- Name C
使用这段代码
<li> <strong>Hosts:</strong>
<ul>
{% for host in page.hosts %}
<li>{{ host }}
{% endfor %}
</ul>
我收到了正确的列表
<ul>
<li> <strong>Hosts:</strong>
<ul>
<li>Name A </li>
<li>Name B </li>
<li>Name C </li>
</ul>
</ul>
但是,我想通过
来降价<li> <strong>Hosts:</strong>
<ul>
{% for host in page.hosts %}
<li>{{ host | markdownify }}
{% endfor %}
</ul>
但是 Jekyll returns:
<ul>
<li> <strong>Hosts:</strong>
<ul>
<li><p>Name A </p></li>
<li><p>Name B </p></li>
<li><p>Name C </p></li>
</ul>
</ul>
有什么方法可以禁止 Jekyll 将 <p>
标签添加到列表项中?实际上,如果我想添加任何丰富的格式,我需要将 HTML 直接放入项目中,但我想通过 Markdown'ing Front Matter 文本来添加它。有什么建议吗?
PS: 我的网站托管在 Github 页数
您可以像这样使用 remove filter :
{{ host | markdownify | remove: '<p>' | remove: '</p>' }}
好吧...这是个很老的问题,但仍然很现实。
您可以像以前使用 | remove: '<p>' | remove: '</p>'
。但它会删除文本中的每个 <p>
标记。
但是如果您只想在只有一个 <p>
节点的情况下删除 <p>
标签包装,您将需要更复杂的解决方案。
如果没有外部插件和过滤器,几乎没有办法做到这一点。
这是我的解决方案:
{%- assign arr = yourTextVar | markdownify | strip | split: "<p>" -%}
{%- if arr.size > 2 -%}
{{ arr | join: "<p>" | prepend: "<p>" }}
{%- else -%}
{{ arr[1] | remove: "</p>" }}
{%- endif -%}
它将拆分空 <p>
标签上的文本,并会忽略 <p id="my-id">
使用 md.renderInline() 删除 <p>
标签
我“杀死”<p>
和 </p>
失败了。
所以我在 p 元素中添加了一个 css-class,例如.handle-as-span
,然后我可以用 css“操纵”p 元素(从块更改为内联)。
{: .handle-as-span }
![Image Alt Tag](path/to/image)
它也应该适用于 markdown 中的列表/表格。我了解到 {: .handle-as-span }
有时需要放在块之前,有时需要放在块之后。试试吧。它仍然很难看,但至少我的设计没有被破坏。
p.handle-as-span {
display: inline;
}