16

HTML テキストと HTML 要素の 2 つの子を持つノードがあります。

<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)

さて、上記のノードをメインノードに追加するには、次を使用します。

node.add_child(span_node)

これにより、最後にスパン ノードが追加されます。span_nodeをすべての子の前に置くにはどうすればよいですか?

4

3 に答える 3

17

ほぼ正しい解決策を提供してくれたPestoに感謝します。

実用的な解決策は次のとおりです。

node.children.first.add_previous_sibling(span_node)
于 2009-06-03T08:00:24.370 に答える
9

NodeSet#before次のように使用できます。

node.children.before(span_node)

NodeSet#before最初の要素として項目を挿入するためのショートカット メソッドです。より汎用的なソリューションは、 と を使用することNode#beforeですNode#after。たとえば、の直前にsome_node.before fooノードを兄弟として追加します。 似ている。これに注意してください:foosome_nodeNode#after

node.children.first.before(span_node)

したがって、上記のソリューションと同等です。

于 2009-06-02T15:18:33.073 に答える