因此,我的目標是在一段範圍內的首段之後包裝所有段落。我試圖弄清楚如何在單個跨度中包裝節點集,並且.wrap()將每個節點包裝在自己的跨度中。正如在想:如何在一個範圍中包裝Nokogiri節點集
<p>First</p>
<p>Second</p>
<p>Third</p>
要成爲:
<p>First</p>
<span>
<p>Second</p>
<p>Third</p>
</span>
任何樣本代碼,以幫助?謝謝!
因此,我的目標是在一段範圍內的首段之後包裝所有段落。我試圖弄清楚如何在單個跨度中包裝節點集,並且.wrap()將每個節點包裝在自己的跨度中。正如在想:如何在一個範圍中包裝Nokogiri節點集
<p>First</p>
<p>Second</p>
<p>Third</p>
要成爲:
<p>First</p>
<span>
<p>Second</p>
<p>Third</p>
</span>
任何樣本代碼,以幫助?謝謝!
我下面做:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse(<<-html)
<p>First</p>
<p>Second</p>
<p>Third</p>
html
nodeset = doc.css("p")
new_node = Nokogiri::XML::Node.new('span',doc)
new_node << nodeset[1..-1]
nodeset.first.after(new_node)
puts doc.to_html
# >> <p>First</p><span><p>Second</p>
# >> <p>Third</p></span>
# >>
我會做這樣的事情:
require 'nokogiri'
html = '<p>First</p>
<p>Second</p>
<p>Third</p>
'
doc = Nokogiri::HTML(html)
paragraphs = doc.search('p')[1..-1].unlink
doc.at('p').after('<span>')
doc.at('span').add_child(paragraphs)
puts doc.to_html
導致HTML看起來像:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>First</p>
<span><p>Second</p>
<p>Third</p></span>
</body></html>
舉你知道發生了什麼,下面是一個更詳細的輸出,顯示了doc
的中間變化:
paragraphs = doc.search('p')[1..-1].unlink
paragraphs.to_html
# => "<p>Second</p><p>Third</p>"
doc.at('p').after('<span>')
doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n<p>First</p>\n<span></span>\n\n</body></html>\n"
doc.at('span').add_child(paragraphs)
doc.to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n<p>First</p>\n<span><p>Second</p>\n<p>Third</p></span>\n\n</body></html>\n"
望着初始HTML,我不知道問的問題是要順利進行正常的日常工作,HTML,但是,如果你有絕對的把握它永遠不會從
<p>...</p>
<p>...</p>
<p>...</p>
改變
佈局然後你應該沒問題。如果HTML確實如此,任何基於HTML,HTML樣本的回答都會很糟糕:
<div>
<p>...</p>
<p>...</p>
<p>...</p>
</div>
...
<div>
<p>...</p>
<p>...</p>
<p>...</p>
</div>
如果這是HTML,請注意'span'中的'p'無效。 – matt