Отображать необработанный html в атрибуте v-html

Я обнаружил проблему с рендерингом html из кода vue. Мне нужно сгенерировать диапазон из vue с необработанным html внутри

<table>
    <tr>
        <td style = "width:33%" v-html = "diffText"></td>
    </tr>
</table>
this.diff.forEach((part) => {
    let color = part.added ? 'green' :
                    part.removed ? 'red' : 'grey';
    this.diffText += "<span style='color:" + color + "'>" + part.value + "</span>";
});

part.value является необработанным html.

Вы говорите, что хотите, чтобы на выходе отображался необработанный HTML? или что у вас есть видимый необработанный html, который вы хотите отобразить html? Если это первый, используйте v-text вместо v-html. Если это второй, используйте фреймворк для того, в чем он хорош; вместо того, чтобы зацикливаться в javascript и вставлять результирующую строку html в одну переменную, поместите цикл v-for в шаблон и управляйте html оттуда.

Daniel Beck 22.12.2020 17:55

@ Даниэль, поскольку ОП пометил перенос в <xmp> как принятый ответ, они, вероятно, не хотят, чтобы разметка интерпретировалась. Это означает, что любые будущие пользователи могут подумать, что это приемлемое решение. Поэтому я добавил перспективное решение.

tao 22.12.2020 18:01
Поведение ключевого слова "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
2
1 026
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

<table>
  <tr>
    <td style = "width:33%">
      <pre v-for = "(d, key) in diff"
           :key = "key"
           :style = "{ color: getColor(d) }"
           v-html = "d.value" />
    </td>
  </tr>
</table>
...
  methods: {
    getColor(d) {
      return d.added ? 'green' : d.removed ? 'red': 'grey' 
    }
  }
...

...вероятно, даст результат, который вы ищете. Поскольку содержимое тега <pre> не интерпретируется как HTML, здесь также можно использовать v-text вместо v-html.

Примечание. В отличие от <xmp>, теги <pre> не устарели, и их реализация в браузерах одинакова.

this.diff.forEach((part) => { let color = part.added? 'green': part.removed? 'red': 'grey'; this.diffText += "<span style='color:" + цвет + "'>" + часть.значение + "</span>";});

nullifier 22.12.2020 17:22
Ответ принят как подходящий

Вы можете использовать теги <xmp>.

<xmp>
    <div> I am a Div</div>
</xmp>

это отобразит <div> I am a Div</div>.

Другие способы сделать это:

1. Замените некоторые специальные символы из исходной строки html:

  • Замените символ & на &amp;
  • Замените символ < на &lt;
  • Замените символ > на &gt

заменить специальные символы - лучшее решение для меня.

nullifier 13.01.2021 14:47

Я обнаружил, что лучшим решением является замена всех "<" на "<" и ">" на ">"

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