2009-06-02 16 views
14

मेरे पास एक नोड है जिसमें दो बच्चे हैं: एक HTML टेक्स्ट और एक HTML तत्व।मैं एक विशिष्ट स्थिति पर एक नोड में एक बच्चा कैसे जोड़ सकता हूं?

<h1 id="Installation-blahblah">Installation on server<a href="#Installation-blah" class="wiki-anchor">&para;</a> 
</h1> 

इस मामले में HTML पाठ है:

Installation on server 

और HTML तत्व: अब

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) 

:

<a href="#Installation-blah" class="wiki-anchor">anchor;</a> 

मैं तो इस तरह एक नोड बनाने , उपरोक्त नोड को मुख्य नोड में जोड़ने के लिए मैं अनुवर्ती का उपयोग करता हूं आईएनजी:

node.add_child(span_node) 

यह अंत में अवधि नोड को जोड़ता है। मैं सभी बच्चों के सामने span_node कैसे रख सकता हूं?

उत्तर

15

आपके लगभग सही समाधान के लिए धन्यवाद पेस्टो।

काम कर समाधान है:

node.children.first.add_previous_sibling(span_node) 
+1

और यदि कोई बच्चा नहीं है? मुझे एक निर्माता (http://stackoverflow.com/questions/5596210/append-elements-using-nokogirixmlbuilder) का उपयोग करके एक वर्कराउंड मिला। – tokland

8

आप NodeSet#before इस तरह उपयोग कर सकते हैं:

node.children.before(span_node) 

NodeSet#before पहला तत्व के रूप में एक आइटम डालने के लिए एक छोटी-कट तरीका है। एक और सामान्य उद्देश्य समाधान Node#before और Node#after का उपयोग करना है। उदाहरण के लिए, some_node.before foo को some_node से पहले सीधे भाई के रूप में नोड foo जोड़ देगा। Node#after समान है। ध्यान दें कि यह:

node.children.first.before(span_node) 

इस प्रकार उपरोक्त समाधान के बराबर है।

+0

दुर्भाग्य से, यह समाधान केवल सामग्री कहते हैं बच्चों के सामने (मेरे मामले एक्सएमएल पाठ myLink में)। – Manuel

+0

मेरे लिए काम करता है। मान लीजिए कि कम से कम एक मौजूदा बच्चा है। –

संबंधित मुद्दे