我试图理解由mbostock制作的包含长文本标签的d3代码块。
完整示例和代码:http://bl.ocks.org/mbostock/7555321
此示例之前已在SO上引用,但我无法理解" .tick" class有一个文本元素,可以选择并传递给" wrap"功能
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll(".tick text") //text selected here
.call(wrap, x.rangeBand()); //wrap function called here
function wrap(text, width) {
text.each(function() {
var text = d3.select(this),
words = text.text().split(/\s+/).reverse(), //text manipulated here
我认为当" xAxis()"调用然后缩放(x)指定" name"数据正在附加,但我无法理解如何在" wrap()"中传递和访问这些数据。功能
答案 0 :(得分:1)
轴组件在调用时创建特定结构。特别是,它使用类text
创建tick
元素,并将表示tick值的数据绑定到它们。代码中使用的.call()
函数实际上传递了整个选择(在本例中为text
元素) to the function given as argument. This is
text argument in the
wrap`函数。
.each()
内的wrap()
调用会迭代所有这些元素。 d3.select(this)
选择每个元素,.text()
访问元素的文本内容(还有其他非D3方式访问它)。文本内容是用轴刻度显示的实际文本,这是在这里被分成几行的内容。