2012-12-17 81 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回调函数将提供当前的DOM元素作为this,所以这应该工作:

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

除此之外,问题是,你需要使用该号码的上下文。例如,为了获取文本的宽度之和,你可以这样做:

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

谢谢。这个答案帮助我找到更多关于stackoverflow的信息,并且我使用了text.each(function(d,i))来获取我需要的所有信息。为我节省了Google搜索时间:) –

8

您还可以通过使用节点(这样做同步的元素):

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

这比直接使用'each()'更直观 – Rustam

+1

正是我需要的感谢! – Julez