2009-06-02 70 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

相关问题