سؤال

لدي عقدة لها طفلان: نص 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)

هو ما يعادل الحل أعلاه.

node.prepend_child span_node

Nokogiri :: XML :: Node # Prepend_child

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top