使用Liquid截断HTML

Cod*_*eef 4 templating liquid

我正在使用Liquid模板引擎来显示一系列摘要的帖子 - 目前我还有以下几点:

{% for page in site.posts %}
  {{page.content | truncatewords: 100}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

页面内容包含HTML,使用truncatewords可能导致无效的HTML插入输出中.我不想从内容中删除所有HTML(嵌入的视频和图像应该是可见的),理想情况下我想要的是添加适当的结束标记.

我可以看到,仅截断不会达到我预期的结果,所以我的问题是:如何截断我的HTML以便使用Liquid输出有效的标记?

更新

一个非常具体的问题是我有一个使用Pigments标记的代码示例.现在,如果截断发生在代码示例的中间,它会打开几个标记,弄乱页面的其余部分.我正在寻找一种方法来截断这些帖子而不删除所有代码示例 - 只是截断并关闭内容正文中的所有打开标记.

Cod*_*eef 6

好吧,所以在无法在网上找到这么多的方法之后,我利用Nokogiri和深度优先遍历解析的HTML节点树来制作我自己的解决方案.

TruncateHTML是一个简单的脚本,它允许截断HTML片段,同时保留有效的结构.