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