现在我已经熟悉了标记的.js。我想为调用marked.parse()
时渲染的元素添加html属性。在执行此操作时,定义了一个自定义renderer
对象,该对象覆盖code
方法。
当renderer
对象被传递给marked.parse(string, {'renderer': renderer})
,并且我开始在标记为.js的TextArea
中键入时,会引发以下错误:
Uncaught TypeError: t.text is not a function
https://marked.js.org/using_pro#renderer
渲染器定义给定令牌的HTML输出。如果将渲染器对象提供给"标记"选项,它将与内置渲染器合并,其中的任何函数都将覆盖该令牌类型的默认处理。
引发此错误的原因是什么?
const renderer = {
code(code, infoString) {
return `
<code class="block_code_snippet fill_block_width">${string}</code
`
},
};
post_content_body.addEventListener("keyup", (event) => {
let marked_post_content = marked.parse(
post_content_body.value, {"renderer": renderer}
);
post_preview.innerHTML = marked_post_content
})
我相信传入的渲染器对象没有与默认渲染器合并,而是完全替换了它。结果,渲染器只处理代码,但失去了所有其他渲染功能——参见";块级渲染器方法";以及";内联级渲染器方法";在这里
尝试将代码更改为以下内容:
const renderer = new marked.Renderer();
renderer.code = function(code, infoString) {
return `
<code class="block_code_snippet fill_block_width">${string}</code
`
};