为什么 Nokogiri 不能用 link 包裹我的图像?

Why can't Nokogiri wrap my image with a link?

当我尝试用 link 标签包裹图像时,我对 Nokogiri (1.6.6.2) 的反应感到困惑。这是我的问题的一个例子:

fragment = Nokogiri::HTML5.fragment("<p>Example</p><img src='test.jpg' class='test'><p>Example</p>")

现在我想用 link 包裹图像:

fragment.search('img').wrap('<a href="http://www.google.com"></a>')

不幸的是,这会导致错误:

ArgumentError: Requires a Node, NodeSet or String argument, and cannot accept a NilClass.
(You probably want to select a node from the Document with at() or search(), or create a new Node via Node.new().)

现在很奇怪,它与其他标签一起使用:

fragment.search('img').wrap('<something href="http://www.google.com"></something>')

Nokogiri 为什么要这样做?这是一个错误吗?

第一个问题是:

uninitialized constant Nokogiri::HTML5 (NameError)

您需要 Nokogiri::HTML

运行 这个:

require 'nokogiri'

fragment = Nokogiri::HTML.fragment("<p>Example</p><img src='test.jpg' class='test'><p>Example</p>")
fragment.search('img').wrap('<a href="test">')

然后查看片段:

puts fragment.to_html
# >> <p>Example</p><a href="test"><img src="test.jpg" class="test"></a><p>Example</p>

它似乎工作正常。添加尾随 </a> 也有效。

也许您需要检查您的 Nokogiri 和 libXML2 版本。