2012-10-23 16 views
21

मुझे मौजूदा तत्वों के लिए नए भाई बहन डालने में समस्या है।d3.js - नए भाई तत्वों को कैसे सम्मिलित करें

मैं इस संरचना

<svg> 
    <g> 
    <path class="data"></path> 
    <path class="data"></path> 
    </g> 
</svg> 

है और इस संरचना

<svg> 
    <g> 
    <path class="data"></path> 
    <text></text> 
    <path class="data"></path> 
    <text></text> 
    </g> 
</svg> 

चाहते हैं, लेकिन अगर मैं सम्मिलित d3.js का उपयोग समारोह

d3.select("g").insert("text", "path.data"); 

मैं निम्नलिखित मिल (का चयन के बावजूद कक्षा के नाम से)

<svg> 
    <g> 
    <text></text> 
    <path class="data"></path> 
    <path class="data"></path> 
    </g> 
</svg> 

कोई विचार?

उत्तर

27

सबसे पहले, यह ध्यान देने योग्य है कि सम्मिलित फ़ंक्शन में दूसरा तर्क चयनकर्ता से पहले है। इसके अलावा, बाएं हाथ के परिणाम पर जंजीर परिचालन कार्य करते हैं।

तो तुम

// select all the g elements (only 1) 
d3.select("g") 
    // For each g, insert a text element before "path.data" 
    .insert("text", "path.data"); 

ताकि आप ".data" तत्वों में से प्रत्येक के चयन और उनमें से प्रत्येक के लिए कोई कार्रवाई करने की जरूरत है आप प्रत्येक बच्चे ".data" के लिए एक कार्रवाई करने के लिए चाहते किया है । मुझे पूरी तरह से यकीन नहीं है कि डी 3 आपको एक विशिष्ट बच्चे के बाद तत्व डालने की अपेक्षा करता है। मुझे तत्व निर्माण और सम्मिलन करने के लिए डीओएम एपीआई का उपयोग करना बहुत आसान लगता है, लेकिन चयन पर पुनरावृत्ति करने के लिए d3.each फ़ंक्शन का उपयोग करना।

d3.selectAll("g > .data").each(function() { 
    var t = document.createElement('text'); 
    this.parentNode.insertBefore(t, this.nextSibling);  
});​ 
+0

धन्यवाद मैट। यह वही करता है जो मैं चाहता हूं। यह शायद तब तक का सबसे अच्छा समाधान है, d3.js सम्मिलित फ़ंक्शन केवल चयनकर्ताओं (इस समय) के रूप में स्थिरांक का समर्थन करता है। तो आप एक चयनकर्ता के रूप में "this.nextSibling" का उपयोग नहीं कर सकते हैं। मैं एक आदर्श दुनिया से संबंधित d3.js फ़ंक्शन को इस तरह कुछ दिखाना चाहिए: d3.select (this.parentNode) .insert ("text", यह); – Codetoffel

+0

'.each' और' document.createElement' के साथ नए तत्व जोड़ना दस्तावेज़ में नोड जोड़ता है, लेकिन इसे किसी कारण से प्रदर्शित होने से हटा दिया जाता है। माना जाता है कि, डी 3 के 'डालने() t'o का उपयोग करना संभव है, लेकिन "पहले" चयनकर्ता' डालने '(') में पास किया गया चयनकर्ता केवल एक तत्व का चयन करेगा। –

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

  • कोई संबंधित समस्या नहीं^_^