Robin
Robin

Reputation: 8498

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

I'm confused about the reaction of Nokogiri (1.6.6.2), when I try to wrap an image with a link tag. Here is an example of my problem:

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

Now I would like to wrap the image with a link:

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

This unfortunately results in an error:

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().)

Now the very strange this is, it works with other tags:

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

Why is Nokogiri doing that? Is it a bug?

Upvotes: 0

Views: 277

Answers (1)

the Tin Man
the Tin Man

Reputation: 160549

The first problem is:

uninitialized constant Nokogiri::HTML5 (NameError)

You want Nokogiri::HTML instead.

Running this:

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">')

and looking at fragment afterwards:

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

It appears to be working correctly. Adding the trailing </a> also works.

Perhaps you need to check your Nokogiri and libXML2 versions.

Upvotes: 1

Related Questions