1

尝试将这个简单的降价转换为 html 时:

* section one
    * item one
    * item two

    This is the first section

* section two
    * item one
    * item two

    This is the second section

我收到的 html 是:

<ul>
    <li>
        <p>section one</p>
        <ul>
            <li>item one</li>
            <li>
                <p>item two</p>
                <p>This is the first section</p>
            </li>
        </ul>
    </li>
    <li>
        <p>section two</p>
        <ul>
            <li>item one</li>
            <li>
                <p>item two</p>
                <p>This is the second section</p>
            </li>
        </ul>
    </li>
</ul>

第一级列表中的段落是嵌套列表的第二个列表项的一部分。
我希望这一段是嵌套列表的兄弟,我什至在不同的在线编辑器中对其进行了测试,它们按照我的预期呈现它,而不像marked.

我做错了什么还是它是一个错误marked
我尝试使用这些选项,但没有任何帮助。

这是代码:

const marked = require("marked");
let str = "* section one\n\t* item one\n\t* item two\n\n\tThis is the first section";
str += "\n\n* section two\n\t* item one\n\t* item two\n\n\tThis is the second section";

marked(str)
4

1 回答 1

1

这绝对是一个错误。正如您所注意到的,其他实现按您的预期呈现。

但是,可以说您的文档中存在轻微错误。您应该在(外部)列表项的第一行和嵌套列表之间添加一行。

假设您正在创建一个仅包含第一个(外部)列表项内容的文档。当您对列表进行格式化时,它看起来像这样:

section one
* item one
* item two

This is the first section

大多数 Markdown 实现解释为以下之一:

<p>section one * item one * item two</p>
<p>This is the first section</p>

或者

<p>section one <em> item one </em> item two</p>
<p>This is the first section</p>

当然,您需要在第一行和列表之间有一个空行。像这样:

section one

* item one
* item two

This is the first section

始终呈现为:

<p>section one</p>
<ul>
    <li>item one</li>
    <li>item two</li>
</ul>
<p>This is the first section</p>

将其应用于您的完整文档,如下所示:

* section one

    * item one
    * item two

    This is the first section

* section two

    * item one
    * item two

    This is the second section

你会得到好的、一致的结果

嗯,好吧,事实证明 Marked 也弄错了。绝对是一个错误。

于 2016-08-21T14:36:15.600 回答