2009-06-02 169 views
14

我有一個有兩個孩子的節點:一個HTML文本和一個HTML元素。如何將孩子添加到特定位置的節點?

<h1 id="Installation-blahblah">Installation on server<a href="#Installation-blah" class="wiki-anchor">&para;</a> 
</h1> 

在這種情況下,HTML文本爲:

Installation on server 

和HTML元素:

<a href="#Installation-blah" class="wiki-anchor">anchor;</a> 

我然後創建一個像這樣的節點:

span_node = Nokogiri::HTML::Node.new('span',doc) 
span_node['class'] = 'edit-section' 

link_node = Nokogiri::HTML::Node.new('a',doc) 
link_node['href'] = "/wiki/#{page_id}/#{@page.title}/edit?section=#{section_index}" 
link_node['class'] = 'icon icon-edit' 
link_node.content = 'mylink' 

span_node.add_child(link_node) 

現在,將上面的節點添加到主節點我使用以下內容ing:

node.add_child(span_node) 

這會在末尾附加跨度節點。我怎樣才能把span_node放在所有的孩子面前?

回答

15

感謝Pesto爲您提供幾乎正確的解決方案。

工作的解決方案是:

node.children.first.add_previous_sibling(span_node) 
8

可以使用NodeSet#before這樣的:

node.children.before(span_node) 

NodeSet#before是一種短切方法來插入的項目作爲第一個元素。更通用的解決方案是使用Node#beforeNode#after。例如,some_node.before foo將在some_node之前直接添加節點foo作爲兄弟。 Node#after與此類似。請注意:

node.children.first.before(span_node) 

因此等同於上面的解決方案。

+0

不幸的是,這種解決方案只增加內容(在我的情況下,XML文本myLink的)在孩子們面前。 – Manuel 2009-06-03 07:25:12

+0

適合我。假設至少有一個現有的孩子。 – 2010-09-07 12:40:49

相關問題