2012-12-17 5 views
13
var text = vis.selectAll("text") 
    .data(words, function(d) { return d.text.toLowerCase(); }); 
    text.enter().append("text") 
    .attr("text-anchor", "middle") 
    .attr("transform", function(d) { 
       return "translate(" + [d.x, d.y] + ")"}) 
    .style("font-size", function(d) { return d.size + "px"; }) 


    var bbox = text.node().getBBox(); 

का उपयोग कर टेक्स्ट क्षेत्र प्राप्त करना प्रत्येक पाठ के टेक्स्ट क्षेत्र को प्राप्त करने के लिए मैं getBBox() का उपयोग कैसे करूं?getBBox()

उत्तर

15

यहां सबसे अच्छा तरीका इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। अधिकांश d3 कॉलबैक कार्यों this के रूप में वर्तमान DOM तत्व की आपूर्ति करेगा, तो यह काम करना चाहिए:

text.each(function() { 
    console.log(this.getBBox()); 
}); 

इसके अलावा, प्रश्न संदर्भ में जो आप उस नंबर का उपयोग करने की जरूरत है। उदाहरण के लिए, प्राप्त करने के लिए पाठ की चौड़ाई का योग है, तुम कर सकते हो:

var textWidth = 0; 
text.each(function() { 
    textWidth += this.getBBox().width; 
}); 
+1

धन्यवाद। इस जवाब ने मुझे स्टैक ओवरफ्लो पर अधिक जानकारी प्राप्त करने में मदद की और मैं सभी जानकारी प्राप्त करने के लिए text.each (फ़ंक्शन (डी, i)) का उपयोग कर रहा हूं। मुझे googling के घंटे बचाया :) –

8

इस तुल्यकालिक एक तत्व पर नोड (का उपयोग करके कर सकते हैं):

console.log(text.node().getBBox()); 
+2

यह 'प्रत्येक()' – Rustam

+1

का उपयोग करने से कहीं अधिक सहज है बस मुझे धन्यवाद चाहिए! – Julez