В графике SVG я создаю элементы узла, состоящие из прямоугольника и некоторого текста.Объем текста может значительно отличаться, поэтому я хотел бы установить ширину прямоугольника в зависимости от ширины текста.
Вот создание прямоугольников с D3.js (с использованием фиксированной ширины и высотызначения):
var rects = nodeEnter.append("rect")
.attr("width", rectW)
.attr("height", rectH);
, за которым следует текстовый элемент:
var nodeText = nodeEnter.append("text")
.attr("class", "node-text")
.attr("y", rectH / 2)
.attr("dy", ".35em")
.text(function (d) {
return d.data.name;
});
nodeText // The bounding box is valid not before the node addition happened actually.
.attr("x", function (d) {
return (rectW - this.getBBox().width) / 2;
});
Как видите, в настоящее время я центрирую текст в доступном пространстве.Затем я попытался установить ширину ректов на основе их текста, но я никогда не получал одновременно и элемент rect, и текстовый HTML-элемент (для getBBox ()) одновременно.Вот одна из моих попыток:
rects.attr("width",
d => this.getBBox().width + 20
);
, но, очевидно, this
неверно, поскольку относится к rects
, а не к тексту.
Какой здесь правильный подход?