2013-05-22 8 views
12

मैंने हाल ही में एसवीजी में हेरफेर करने के लिए कुछ स्क्रिप्ट लिखने के लिए d3.js का उपयोग शुरू किया। इसलिए अधिकांश समय मैं डी 3 दस्तावेज का संदर्भ देता हूं और समाधान ढूंढता हूं। हालांकि मैं समझ नहीं पा रहा हूं कि क्यों d3.select सरणी के फ़ंक्शन रिटर्न सरणी। उदाहरण के लिए मान लें कि मेरे पास SVG तत्व है और यदि मैं d3.select("svg") करता हूं, तो यह [[svg]] देता है इसलिए मुझे d3.select("svg")[0] करना है। प्रलेखन कहते हैंd3.select() सरणी की वापसी सरणी क्यों करता है?

एक अति सूक्ष्म अंतर है कि चयन बांटा जाता है है: बल्कि एक आयामी सरणी से, प्रत्येक चयन तत्वों की सरणियों की एक सरणी है। यह subselections की सौपानिक संरचना को बरकरार रखता है

फिर हम यह समय के सबसे अधिक उपेक्षा कर सकते हैं कहते हैं।

  1. यह सरणी की सरणी क्यों लौटाता है?
  2. क्या मतलब

है यह subselections की सौपानिक संरचना को बरकरार रखता है?

अग्रिम धन्यवाद।

उत्तर

5

आपको यह जानने की आवश्यकता नहीं है कि ऑब्जेक्ट d3.select रिटर्न आंतरिक रूप से संरचित कैसे किया जाता है। आपको यह जानने की जरूरत है कि उस ऑब्जेक्ट में कौन सी विधियां उपलब्ध हैं, जो दस्तावेज़ीकरण का वर्णन करता है।

कहो आप इस दस्तावेज़ है:

<div> 
    <span>1</span> 
    <span>2</span> 
</div> 
<div> 
    <span>3</span> 
    <span>4</span> 
</div> 

आप d3.selectAll

var div = d3.selectAll("div"); 

div के साथ सभी <div> तत्वों का चयन करते हैं आकार 2, एक की एक d3 चयन वस्तु में प्रत्येक <div> तत्व के लिए है दस्तावेज़।

लेकिन अगर आप अब इस चयन वस्तु

var span = div.selectAll("span"); 

एक खोज div चयन में प्रत्येक तत्व के भीतर तत्वों मिलान के लिए किया जाता है से एक subselection उत्पन्न, और संरचना संरक्षित है - यानी, span चयन होगा div चयन के रूप में तत्वों की संख्या समान है, जिसमें से प्रत्येक पर आधारित था, और इनमें से प्रत्येक में उस तत्व में पाए गए तत्वों का चयन शामिल होगा।

तो इस मामले में, span दो चुनाव (प्रथम <div> और दूसरा <div>), जिनमें से प्रत्येक (दूसरे में 1 और 2 पहले, 3 और 4 में) दो तत्वों में शामिल होंगे शामिल होंगे।

select के लिए, यह selectAll जैसा है, सिवाय इसके कि यह एक मैच खोजने के बाद बंद हो जाता है; हालांकि, इसकी वापसी ठीक वही तरीके से संरचित है।

Demo

+1

आपका उत्तर समझ में आता है। धन्यवाद। "आपको यह जानने या देखभाल करने की आवश्यकता नहीं है कि ऑब्जेक्ट d3.select रिटर्न को आंतरिक रूप से संरचित किया गया है" मैं उत्सुक हूं और यही वह विचार है जिसे मैं इस प्रश्न से पूछना चाहता था। –

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