当我尝试用链接标签包装图像时,我对Nokogiri(1.6.6.2)的反应感到困惑。这是我的问题的一个例子:
fragment = Nokogiri::HTML5.fragment("<p>Example</p><img src='test.jpg' class='test'><p>Example</p>")
现在我想用链接包装图像:
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这样做?这是一个错误吗?
答案 0 :(得分:1)
第一个问题是:
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版本。