如何将子项添加到特定位置的节点?

我有一个节点有两个孩子:HTML文本和HTML元素。

Installation on server

在这种情况下,HTML文本是:

 Installation on server 

和HTML元素:

  anchor; 

然后我创建一个这样的节点:

 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) 

现在,要将上述节点添加到主节点,我使用以下内容:

 node.add_child(span_node) 

这会在末尾附加span节点。 如何将span_node放在所有孩子面前?

感谢Pesto几乎正确的解决方案。

工作解决方案是:

 node.children.first.add_previous_sibling(span_node) 

你可以像这样使用NodeSet#before

 node.children.before(span_node) 

NodeSet#before是一个将项目作为第一个元素插入的快捷方法。 更通用的解决方案是使用Node#before Node#afterNode#after 。 例如, some_node.before foo将在some_node之前直接添加节点foo作为兄弟节点。 Node#after类似。 请注意:

 node.children.first.before(span_node) 

因此等同于上述解决方案。

node.prepend_child span_node

Nokogiri :: XML :: Node #prepend_child文档