mermaid - markdown的mermaid语法解析渲染

博客介绍了mermaid,其用于解析渲染markdown中的mermaid语法,给出了Github、npm、官方及接口文档链接。还说明了使用方式,包括数据写死在HTML页面的initialize和动态渲染的render,最后探讨了渲染不了的问题,指出未写死到页面的需动态渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mermaid

概述

作用: 用于解析渲染markdown中的mermaid语法

Github: https://github.com/mermaid-js/mermaid

npm: https://www.npmjs.com/package/mermaid

官方文档: https://mermaid-js.github.io/mermaid/#/

接口文档: https://mermaid-js.github.io/mermaid/#/Setup?id=mermaidapi

使用

在这里插入图片描述

方式1 - 数据已经写死在HTML页面中 - initialize
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="G:\VsCode\开源\jquery-3.6.1.min.js"></script>
    <script src="G:\VsCode\开源\mermaid-9.1.7\dist\mermaid.min.js"></script>
    <script>
        mermaid.initialize({ 
            startOnLoad: 'true',
            flowchart:{ htmlLabels: true },
            "theme": "forest",
        }); 
    </script>
</head>
<body>

<div class="mermaid" id="mermaid1">
    erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
</div>


<div class="mermaid" id="mermaid2">
    graph TD 
    A[Client] --> B[Load Balancer] 
    B --> C[Server01] 
    B --> D[Server02]
</div>

</body>

</html>

在这里插入图片描述

方式2 - 动态渲染(例如从后端拿到数据在进行页面渲染)- render
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="G:\VsCode\开源\jquery-3.6.1.min.js"></script>
    <script src="G:\VsCode\开源\mermaid-9.1.7\dist\mermaid.min.js"></script>
    <script>
        mermaid.initialize({
            startOnLoad: 'true',
            flowchart: {
                htmlLabels: true
            },
            "theme": "forest",
        });
    </script>
</head>

<body>

    <div class="mermaid" id="mermaid1">
        erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
    </div>


    <div class="mermaid" id="mermaid2">
        graph TD
        A[Client] --> B[Load Balancer]
        B --> C[Server01]
        B --> D[Server02]
    </div>

</body>

<script>
    $(function () {

        let mdMermaidContent = "```mermaid\n" +
            "    graph LR\n" +
            "    a[\"关键字\"] --> b[\"async:修饰函数 - 表明功能是异步请求服务器获取数据\"]\n" +
            "    a[\"关键字\"] --> c[\"await:用在函数里面 - 获取响应的Promise对象\"]\n" +
            "```";
        
        console.log("")
        console.log("原始内容:");
        console.log(mdMermaidContent)
        
        
        let canMermaidContent = mdMermaidContent.replaceAll("```mermaid",'');
        canMermaidContent = canMermaidContent.replaceAll("`",'');

        console.log("")
        console.log("去掉markdown部分语法:");
        console.log(canMermaidContent)

        //参数说明:渲染后生成svg的ID属性、待渲染的mermaid内容、渲染成功后的回调函数(入参是渲染生成后的DOM-HTML)
        let renderHtmlContent = mermaid.render('mermaid-svg-new', canMermaidContent, function(svgContent) {
            console.log("")
            console.log('渲染生成的Dom:');
            console.log( svgContent)    
        });

        
        //渲染到页面上
        $(renderHtmlContent)
            .wrap("<div />")
            .addClass("mermaid mermaid-dynamic")
            .appendTo("body")

    })
</script>


</html>

在这里插入图片描述

问题

为什么渲染不了

凡是没写死到页面的,都需要使用动态进行渲染mermaid语法内容,请参考上面的动态渲染代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值