Моей целью было выровнять группу разных tspan
по центру.Я ценю помощь @enxaneta.Я отправил свой собственный ответ, так как застрял с каким-то интересным дефектом.Последняя строка tspan
не выровнена по левому краю.Я видел 3 или 5 пикселей.Это было вызвано пространством XML.Вам нужно удалить пробелы между tspan
элементами, чтобы избавиться от этой проблемы.
![enter image description here](https://i.stack.imgur.com/VO5fM.png)
let tspans = document.querySelectorAll("tspan");
let indexOfLongestRow = 0;
for(let i = 0; i < tspans.length; i++) {
if(tspans[indexOfLongestRow].getComputedTextLength() < tspans[i].getComputedTextLength()) {
indexOfLongestRow = i;
}
}
console.log(tspans[indexOfLongestRow]);
for(let i = 0; i < tspans.length; i++) {
let offset = (tspans[indexOfLongestRow].getComputedTextLength() - tspans[i].getComputedTextLength())/2;
console.log(offset);
tspans[i].setAttributeNS(null, "dx", -offset);
}
svg {
border: solid 1px blue;
font-family: monospace;
font-size: 9px;
}
<svg viewBox = "0 0 400 500">
<circle r="3" cx="200" cy="50" fill="red">
</circle>
<text y="50" text-anchor="middle">
<tspan x="200" dy="15">Second long long long label</tspan><tspan x="200" dy="15">This is a longest label that i have here ergrtgrtgregregregerg</tspan><tspan x="200" dy="15">This is a longest label that i have here ergrtgrtgregregregerg</tspan><tspan x="200" dy="15">First label</tspan><tspan x="200" dy="15">First label dfhdfhh</tspan><tspan x="200" dy="15">This is a longest label that i have here ergrtgrtgregregregerg</tspan><tspan x="200" dy="15">First label rth th rthththsrth</tspan><tspan x="200" dy="15">First label rthrth rthrt 5tyjey yejetyj tyjtyj teyjteyj</tspan><tspan x="200" dy="15">First label reghregregregregregrge</tspan></text>
</svg>