在没有包含<p>的情况下在JS中进行Markdown?</p>

时间:2014-12-27 00:06:19

标签: javascript markdown

如何使用任何JS库(例如markdown-js)将一段降价文本转换为HTML,或者将其标记为不包含在段落标记中?

例如,我希望将this *italic* text转换为this <i>italic</i> text而不将其封装在<p></p>中。

编辑:
- 我的问题不是如何在转换后从输出中删除p标签,我的问题是如何要求库不要在p标签中包含输出。
- 默认情况下,markdown-js并在<p></p>内标记为封闭输出。

5 个答案:

答案 0 :(得分:11)

marked库允许您定义自己的渲染器,允许您定义段落的输出。

您可以使用以下方式传入自己的渲染器:

marked.setOptions({
  renderer: new MyRenderer(),
});

var output = marked('This **text** will be rendered with MyRenderer');

这将要求您为blockquotehtmlparagraph以及默认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-itmd.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)