Javascript 长文本的省略号

Javascript 长文本的省略号,javascript,d3.js,svg,Javascript,D3.js,Svg,我已经找到了一些例子,但很难让它们发挥作用,如果有人有更清晰或一些见解,我将不胜感激 var wrap = function() { var self = d3.select(this), textLength = self.node().getComputedTextLength(), text = self.text(); while (textLength > (50) && text.length > 0) { text = text.slice(0, -1)

我已经找到了一些例子,但很难让它们发挥作用,如果有人有更清晰或一些见解,我将不胜感激

var wrap = function() {
var self = d3.select(this),
textLength = self.node().getComputedTextLength(),
text = self.text();
while (textLength > (50) && text.length > 0) {
text = text.slice(0, -1);
self.text(text + '...');
textLength = self.node().getComputedTextLength();
}
};



const y = d3.scaleBand()
.range([height, 0], .1)
.domain(data.map(function (d) {
return d.name; <----- wrap need to somehow attach to this
})
);
var wrap=function(){
var self=d3。选择(此),
textLength=self.node().getComputedTextLength(),
text=self.text();
而(textLength>(50)和&text.length>0){
text=text.slice(0,-1);
self.text(text+“…”);
textLength=self.node().getComputedTextLength();
}
};
常量y=d3.scaleBand()
.范围([高度,0],.1)
.domain(data.map)(函数(d){

return d.name;无论您试图做什么,您的方法的问题是
getComputedTextLength()
不适用于虚拟元素或未附加到元素的数据……它只适用于SVG上的真实SVG元素

但是,由于您希望将该字符串数组传递到频带比例的域(我们通常在渲染元素之前设置该域),因此在我看来,您希望事先修剪长字符串

如果这是正确的,一种可能的方法是呈现一个临时元素,只是为了得到它的计算文本长度,修剪它,创建一个新字符串并丢弃临时元素

所以,假设我们有这个数据数组:

var data = ["A very long long long text here",
    "another very very long piece of text in this string",
    "finally, here we have another very big string"
];
我们可以使用wrap函数的修改版本来修剪字符串。这是一个演示,请检查控制台:

var data=[“这里有很长的文本”,
“此字符串中的另一段非常长的文本”,
“最后,我们还有一条非常大的绳子”
];
var svg=d3.选择(“svg”);
data.forEach(wrap);
函数换行(d、i、arr){
var self=svg.append(“文本”)
.案文(d);
var textLength=self.node().getComputedTextLength();
而(textLength>50&&d.length>0){
arr[i]=arr[i]。切片(0,-1);
self.text(arr[i]+“…”);
textLength=self.node().getComputedTextLength();
}
arr[i]+=“…”;
self.remove();
}
console.log(数据)

为什么要将此
包装到
scaleX
中?