使用非凡的js正确渲染markdown吗?

时间:2018-10-25 22:25:45

标签: javascript markdown

因此,我们具有从YAML生成的HTML。然后,我们使用非凡的js处理浏览器中DOM树 part 。也就是说,我们使用“ markdown”标签获取所有元素,使用非凡的js解析其文本,然后替换其innerHTML。不幸的是,要么我们无法正确呈现HTML实体,要么我们无法正确呈现HTML标签。

是否有推荐的方法可以在浏览器中解析markdown?

// sample text:
// - markdown list with <b>`bold &amp;`</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;,因此,我得到的是&amp;amp;无法正确呈现。但是,即使我将输入更改为&innerHTML也会将其更改回&amp;

更新:我能够回购:https://jsfiddle.net/v1o7hLnr/令人惊讶的突破是两件事:1)使用innerHTML获取要解析的文本,以及2)将HTML实体包装在代码块中。看到这里:https://jsfiddle.net/vLr1qbfc/

这是正在发生的事情(请参见https://jsfiddle.net/k8hy2mtf/):

  1. 我们从innerHTML获得要解析的文本。
  2. innerHTML将&编码为&amp;
  3. 因为文本被包装在一个代码块中,例如:`x&y`,所以收到了`x&amp;y`
  4. 非常明显,然后立即忽略HTML实体
  5. (这就是textContent起作用的原因。)

那么,我的第一个问题就成立了……正确呈现具有卓越性能的HTML文档的最佳方法是什么?我们应该在构建时解析吗?

0 个答案:

没有答案