كيف يمكنني إضافة طفل إلى عقدة في وضع محدد؟
سؤال
لدي عقدة لها طفلان: نص HTML وعنصر HTML.
<h1 id="Installation-blahblah">Installation on server<a href="#Installation-blah" class="wiki-anchor">¶</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
لا تنتمي إلى StackOverflow