2012-12-17 21 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

ありがとうございました。この回答は私がstackoverflowに関するより多くの情報を見つけるのを助け、必要なすべての情報を得るためにtext.each(function(d、i))を使用しています。グーグルで何時間も節約できました:) –

8

あなたはまた、ノードを()を使用して要素に同期これを行うことができます。

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

これは 'each()'を使用するよりもはるかに直感的です – Rustam

+1

私は感謝しました! – Julez

関連する問題