У меня есть код, в котором я добавляю звездочку в конец литерала шаблона в d3js. Я хочу иметь возможность настраивать размер и цвет звездочки независимо от переменной. Вот мой код.
svg.selectAll('.text')
.data(data)
.enter()
.append('text')
.attr('class', d => {
const shortName = getChannelShortName(d.name).toLowerCase();
const channelEnabled = disabledChannels.includes(shortName);
return !channelEnabled ? 'label x-axis-conversion-rate' : 'label x-axis-conversion-rate-disabled'
})
.attr('text-anchor', 'middle')
.attr('x', d => xScaleBottom(d.name) + (d.subsetValue > 9 ? 45 : 45))
.attr('y', d => -50)
.text(d => {
const shortName = getChannelShortName(d.name).toLowerCase();
const channelEnabled = disabledChannels.includes(shortName);
return !channelEnabled ? `${d.conversationRate}%` : `${d.conversationRate}%*`
});
В ${d.conversationRate}%*
я хочу получить контроль над этой звездочкой и изменить ее размер и цвет.
Вы можете использовать svg tspan
, чтобы установить размер и цвет шрифта для текста в элементах svg text
:
Inside a element, text position, text properties, and font properties can be adjusted with with the element (MDN)
Вы можете либо добавить к tspan текст, используя selection.append("text").html(string)
, где строка имеет вид text <tspan font-size = "10" fill = "orange">text</tspan>
.
Или вы можете связать два добавления вместе: одно для добавления и установки текста, а другое для добавления tspan к тексту (поскольку ваш tspan будет находиться в конце текста):
selection.append("text")
.text(d=>d.someText)
.filter(function(d) { return d.doesElementNeedAsterisk })
.append("tspan")
.text("*");
Последний вариант показан ниже:
var data = [
{text1:"text1",color:"steelblue",size:"30px",asterisk:true},
{text1:"text2",color:"crimson",size:"40px",asterisk:true},
{text1:"text3",asterisk:false},
];
var svg = d3.select("body")
.append("svg");
svg.selectAll("text")
.data(data)
.enter()
.append("text") // add text elements
.attr("x", 20)
.attr("y", (d,i)=> i* 50+50)
.text(d=>d.text1) // set the text
.attr("font-size",20)
.filter(function(d) {
return d.asterisk; // filter for values that show asterisks
})
.append("tspan") // append a tspan to these text elements
.text("*")
.attr("fill", d=>d.color) // set color
.attr("font-size",d=>d.size); // set font size.
<script src = "https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
Спасибо. Я смог начать работу, используя второй метод