Как настроить определенный текст в d3.js?

У меня есть код, в котором я добавляю звездочку в конец литерала шаблона в 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}%* я хочу получить контроль над этой звездочкой и изменить ее размер и цвет.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
436
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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>

Спасибо. Я смог начать работу, используя второй метод

LDB 31.05.2019 15:53

Другие вопросы по теме