5

我正在使用 kramdown 解析器将 Markdown 转换为 html。我想在不修改原始降价语法的情况下对图像使用延迟加载。我可以通过在 kramdown gems 中编辑 link.rb 文件来实现这一点。

在此处输入图像描述

但我不想走这条路。因为如果有人更新 kramdown 我会丢失这些编辑。有没有其他方法可以在不修改原始图像语法的情况下做到这一点?

原始图像语法:![](some image link)

当前输出(无上述编辑):<img src="some image link" alt=""/>

预期输出:<img data-src="some image link" alt=""/>

4

2 回答 2

2

您可以使用Nokogiri修改生成的 HTML ,这几乎是您完成任务所需的所有代码。

def responsive_img_src(html_source)
  doc = Nokogiri::HTML::Document.parse('<html></html>', nil, 'UTF-8')
  fragment = Nokogiri::HTML::DocumentFragment.new(doc, html_source)
  fragment.css('img').each { |img| img['data-src'] = img['src'] }
  return fragment.to_html
end

您不能直接使用Nokogiri::HTML(html_source)它来解析您的源代码,因为它会将输出包装到格式良好的 HTML 文档中。这就是您需要 DocumentFragment 的原因。

于 2015-08-22T06:57:14.240 回答
1

如果您使用kramdown,您可以将属性添加到您的降价块。查看文档

在你的情况下An image: ![gras](){: data-src="some image link"}会成功。

于 2015-08-22T09:11:06.760 回答