Markdown-it&字符转义异常求助:寻求官方配置级解决方案
解决Markdown-it解析时的二次转义问题
问题重现
使用Markdown-it解析页面中class为markdown的元素内容时,代码块里的<符号最终显示为<,而非预期的<,出现二次转义的异常结果。
问题根源
当前通过div[i].innerHTML获取内容时,浏览器已经将原始Markdown里的<转义成了<;随后Markdown-it的render()方法会对内容中的&进行转义,把<里的&变成&,最终得到&lt;,渲染到页面就显示为<。
最优解决方案(无需手动替换)
不需要用replaceAll的临时方案,只需要修改获取内容的方式,从innerHTML改为textContent,直接获取元素的原始文本内容,避免浏览器提前转义:
window.onload = function() { var mdit = window.markdownit(); mdit.set({ highlight: function (str, lang) { if (lang && hljs.getLanguage(lang)) { try { var code = '<pre class="hljs"><code>' + hljs.highlight(lang, str, true).value + '</code></pre>'; return code; } catch (__) {} } } }); var divs = document.getElementsByClassName('markdown'); for(var i = 0; i < divs.length; i++) { // 改用textContent获取原始未转义的Markdown内容 var content = divs[i].textContent; divs[i].innerHTML = mdit.render(content); } }
补充说明
如果你的Markdown内容中混合了需要保留的HTML标签,textContent可能会丢失标签结构,这时可以将Markdown内容放在<textarea>中,或者使用data-*属性存储原始内容,确保能获取到未被浏览器转义的原始文本。
内容的提问来源于stack exchange,提问作者dudung
相关产品推荐
相关产品推荐

