Как добавить дочернего элемента к узлу в определенной позиции?

StackOverflow https://stackoverflow.com/questions/939853

  •  06-09-2019
  •  | 
  •  

Вопрос

У меня есть узел, у которого есть два дочерних элемента: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)

Теперь, чтобы добавить указанный выше узел к основному узлу, я использую следующее:

node.add_child(span_node)

Это добавляет узел диапазона в конец.Как я могу поставить span_node на глазах у всех детей?

Это было полезно?

Решение

Спасибо, Песто, за ваше почти правильное решение.

Рабочее решение:

node.children.first.add_previous_sibling(span_node)

Другие советы

Вы можете использовать NodeSet#before так:

node.children.before(span_node)

NodeSet#before — это сокращенный метод вставки элемента в качестве первого элемента.Более универсальное решение — использовать Node#before и Node#after.Например, some_node.before foo добавит узел foo как брат или сестра непосредственно перед этим some_node. Node#after похож.Обратите внимание, что это:

node.children.first.before(span_node)

таким образом, эквивалентно приведенному выше решению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top