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;
}