2015-04-30 77 views
3

正如標題所說,我想知道如何將一個節點的內容添加到另一個節點,例如。假設有一個節點:如何使用Nokogiri將一個節點的HTML內容添加到另一個節點

<li> 
<a>I'm a link</a> 
<p>I'm a <b>paragraph</b></p> 
</li> 

而且我想補充的上述內容的另一個節點:

<p> 
<a>Link1</a> 
<a>Link2</a> 
<a>Link3</a> 
<a>Link4</a> 
</p> 

然後卸載後者節點到前者像這樣:

<li> 
<a>I'm a link</a> 
<p>I'm a <b>paragraph</b></p> 
<a>Link1</a> 
<a>Link2</a> 
<a>Link3</a> 
<a>Link4</a> 
</li> 

回答

1

我根據你的問題創建了兩個HTML DOM碎片。 這條線基本上結合了@doc.at_css("li") << @doc1.at_css("p").children這兩個片段。

@doc.at("li")返回DOM Nodeli<<附加@ doc1 DOM Node``p這四個a元素的子元素。

require 'nokogiri' 

@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML 
<li> 
<a>I'm a link</a> 
<p>I'm a <b>paragraph</b></p> 
</li> 
EOHTML 

@doc1 = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML 
<p> 
<a>Link1</a> 
<a>Link2</a> 
<a>Link3</a> 
<a>Link4</a> 
</p> 
EOHTML 

@doc.at("li") << @doc1.at("p").children 
print @doc 

<li> 
<a>I'm a link</a> 
<p>I'm a <b>paragraph</b></p> 

<a>Link1</a> 
<a>Link2</a> 
<a>Link3</a> 
<a>Link4</a> 
</li> 
+1

請勿僅發佈代碼。相反,*解釋*爲什麼它的作品。不同之處在於,分發代碼不會幫助用戶避免將來出現問題,而解釋它可以幫助他們避免此問題。另外,'at_css'可以在99%的時間內減少到'at'。 *非常*偶爾選擇器太泛化,Nokogiri無法判斷它是CSS還是XPath。 –

+0

更好嗎?還測試了at'作品。我不知道,謝謝 – archie

相關問題