如何用新标签包装元素的文本内容?

时间:2013-05-10 09:53:17

标签: html ruby nokogiri

我有Nokogiri::XML::Element,其中如下所示:

<div class="berg">This is some text!</div>

我想要做的只是从div中提取文本(这是Nokogiri元素)然后用新标签包装文本,使它看起来像这样:

<div class="berg"><span>This is some text!</span></div>

Nokogiri .wrap函数似乎用新标签包装标签,而不是文本内容,我想知道如何包装标签内容。

2 个答案:

答案 0 :(得分:4)

您可以设置div元素的inner_html。这是一个有效的例子:

html = '<div class="berg">This is some text!</div>'
doc = Nokogiri::HTML.fragment(html)

berg = doc.at('div.berg')    # Or xpath, or whatever method you choose

# Wrap the text in <span>
berg.inner_html = "<span>#{berg.text}</span>"

puts doc  #=> <div class="berg"><span>This is some text!</span></div>

重要的部分是使用inner_html,添加<span>元素并将现有文本元素放入其中。

答案 1 :(得分:3)

你会这样做:

doc.search('div.berg text()').wrap('<span>')