如何使用任何JS库(例如markdown-js)将一段降价文本转换为HTML,或者将其标记为不包含在段落标记中?
例如,我希望将this *italic* text
转换为this <i>italic</i> text
而不将其封装在<p></p>
中。
编辑:
- 我的问题不是如何在转换后从输出中删除p标签,我的问题是如何要求库不要在p标签中包含输出。
- 默认情况下,markdown-js并在<p></p>
内标记为封闭输出。
答案 0 :(得分:11)
marked库允许您定义自己的渲染器,允许您定义段落的输出。
您可以使用以下方式传入自己的渲染器:
marked.setOptions({
renderer: new MyRenderer(),
});
var output = marked('This **text** will be rendered with MyRenderer');
这将要求您为blockquote
,html
,paragraph
以及默认marked.Renderer
定义的所有其他方法定义方法。
以下是一个例子:
function MyRenderer(options) {
this.options = options || {};
}
MyRenderer.prototype.paragraph = function(text) {
return 'This comes from my own renderer: ' + text + '\n';
};
但是,这需要一些努力,因此摆脱段落(<p>
标记)的最快方法是更改{{1}中现有渲染器的代码文件:
替换:
marked.js
使用:
Renderer.prototype.paragraph = function(text) {
return '<p>' + text + '</p>\n';
};
答案 1 :(得分:6)
markdown-it有md.renderInline()方法允许这样做。
答案 2 :(得分:1)
通过对结果使用正则表达式来解决这个问题:
rawMarkup.replace(/^(?:<p>)?(.*?)(?:<\/p>)?$/, "$1")
但仅适用于简单案例,如果有两个相邻的段落,可能会失败。
经过一些测试后,我意识到文本周围有段落标记是有充分理由的,而且我的实现必须适应。
答案 3 :(得分:1)
我在这个问题上已经迟到了,但我昨晚遇到了完全相同的问题,我打开了标记以构建解决此问题的方法。< / p>
我需要能够(对于我的i18n翻译CMS)在任何类型的标记中嵌入标记,例如标题,并让它们从Markdown渲染而不包含<p>
标记。所以这个修复程序使得如果我的源代码中只有一行文本(对我来说是JSON),那么它将不会包含在<p>
标记中。但如果还有更多,它会将它们全部包装在标签中。
这是我对此更改的请求 https://github.com/chjj/marked/pull/841
我非常怀疑它会被包括在内,但我在我的项目中使用它并且它的工作非常好。
答案 4 :(得分:0)
这是对我有用的东西(很多年后)。它假定您知道您不希望在段落标签中包含哪些元素。
const marked = require("marked");
// Every new line in markdown is considered a new paragraph, this prevents
// img tags from being wrapped in <p> tags which is helpful for resizing img's,
// centering captions, etc.
marked.Renderer.prototype.paragraph = (text) => {
if (text.startsWith("<img")) {
return text + "\n";
}
return "<p>" + text + "</p>";
};
html = marked(markdownFile.body)