Итак, у нас есть HTML-код, сгенерированный из YAML.Затем мы обрабатываем часть дерева DOM в браузере с замечательным jj.А именно, мы получаем все элементы с тегом «markdown», анализируем его текст с замечательным js, а затем заменяем его innerHTML.К сожалению, либо мы неправильно отображаем HTML-объекты, либо неправильно отображаем HTML-теги.
Есть ли рекомендуемый способ анализа уценки в браузере?
// sample text:
// - markdown list with <b>`bold &`</b>
var elements = document.getElementsByClassName('markdown');
var count = elements.length;
// generates HTML entities correctly but not HTML tags
for (let index = 0; index < count; index++) {
var newText = md.render(elements[index].textContent);
elements[index].innerHTML = newText;
}
// generates HTML tags correctly but not HTML entities
for (let index = 0; index < count; index++) {
var newText = md.render(elements[index].innerHTML);
elements[index].innerHTML = newText;
}
Обновление: Мне кажется, я понимаю, что происходит, замечательно трактует &
как &
, за которым следует amp;
, и, следовательно, я получаю &amp;
, который не отображается правильно.Но тогда, даже если я изменю ввод только на &
, innerHTML
изменит это обратно на &
.
Обновление: я смог сделать репо: https://jsfiddle.net/v1o7hLnr/. Что удивительно, так это две вещи: 1) использование innerHTML для получения текста для анализа и 2) обертываниеHTML-сущность в блоке кода.Смотрите здесь: https://jsfiddle.net/vLr1qbfc/
Вот что происходит (см. https://jsfiddle.net/k8hy2mtf/):
- Мы получаем текст для анализа из innerHTML.
- Внутренний HTML кодирует
&
to &
. - Поскольку текст обернут в блок кода, например:
`x&y`
, замечательный получает `x&y`
. - замечательный, а затем незамедлительно игнорирует HTML-сущность
- (Вот почему textContent сработал.)
Итак, мой первоначальный вопрос стоит ... Каков наилучший способ правильно отобразить HTML-документ с замечательным? Должны ли мы анализировать во время сборки вместо этого?