关于 vditor.insertValue()插入问题

本贴最后更新于 784 天前,其中的信息可能已经东海扬尘

使用 vditor.insertValue()插入,发现代码块格式会丢失错乱,如下图

image.png

@88250 @Vanessa 求两位大佬解答

  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    346 引用 • 1801 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 贴一下代码

    4 回复
  • lzsk
    作者

    image.png

    image.png

    image.png

    insertValue 的值为后台返回的 content ,用 new Vditor 可以完美展示 但是用 insertValue 就会出现问题

  • lzsk 3 评论
    作者

    @Vanessa 已发代码

    发哪里了?
    Vanessa
    只上传了下面的图片 我把代码复制给你吧
    lzsk
    需要把代码块文本也一并给你吗 @Vanessa
    lzsk
  • lzsk
    作者
    const config: any = {
          width: '100%',
          minHeight: 400,
          // cdn: '/public/js/vditor',
          cdn: 'https://staticweb.ewan.cn/libs/vditor',
          placeholder: '请输入markdown格式文本',
          toolbar: [
            'headings',
            'bold',
            'italic',
            'strike',
            '|',
            'line',
            'quote',
            'list',
            'ordered-list',
            'check',
            'outdent',
            'indent',
            'code',
            'inline-code',
            'insert-after',
            'insert-before',
            'undo',
            'redo',
            'upload',
            'link',
            'table',
            'edit-mode',
            'preview',
            'fullscreen',
            'outline',
            'export',
            {
              hotkey: '⌘-⇧-S',
              name: 'sponsor',
              tipPosition: 's',
              tip: '成为赞助者',
              className: 'right',
              icon: 'xxx',
              click() {
                md.insertValue(props.data[props.option.key]);
              }
            }
          ],
          tab: '\t',
          preview: {
            delay: 50,
            maxWidth: 19200,
            toc: true,
            hljs: {
              lineNumber: true,
              style: {
                'max-height': 'auto'
              }
            },
            actions: ['desktop', 'tablet', 'mobile'],
            markdown: {
              fixTermTypo: true,
              listStyle: true,
              codeBlockPreview: false
            }
          },
          outline: {
            enable: true,
            position: 'right'
          },
          cache: {
            enable: false
          },
          // input: onChange,
          // focus: onChange,
          blur: onChange,
          after: () => {}
        };
        onMounted(() => {
          key.value = Math.random();
          setTimeout(() => {
            md = new Vditor('content', {
              ...config,
              value: props.data[props.option.key]
            });
          }, 150);
        });
    

    @Vanessa 你好这就是所写代码, props.data[props.option.key]为后端返回的 markdown 文本,其中代码块部分用 insertValue 插入的话 就会出现错乱

  • lzsk
    作者
    
    
    
        <!-- TODO 超级SDK:添加网络安全配置, 以在Android9.0上访问http资源 -->
        <application
    
            android:networkSecurityConfig="@xml/super_network_security_config" >
    
    
    
            <!-- SuperSDK start -->
            <!-- TODO 超级SDK:添加FileProvider配置,以在Android9.0上访问文件,${package_name}为应用包名,包名在gradle中配置 -->
            <provider
                android:name="cn.ewan.supersdk.provider.SuperFileProvider"
                android:authorities="${package_name}.super.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/super_file_path"/>
            </provider>
            <!-- SuperSDK end -->
    
        </application>
    

    @Vanessa 可尝试用这个代码块 用 insertValue 插入

  • 试试这个

    vditor.insertValue(`\n\`\`\`java
    
    
    
        <!-- TODO 超级SDK:添加网络安全配置, 以在Android9.0上访问http资源 -->
        <application
    
            android:networkSecurityConfig="@xml/super_network_security_config" >
    
    
    
            <!-- SuperSDK start -->
            <!-- TODO 超级SDK:添加FileProvider配置,以在Android9.0上访问文件,\${package_name}为应用包名,包名在gradle中配置 -->
            <provider
                android:name="cn.ewan.supersdk.provider.SuperFileProvider"
                android:authorities="\${package_name}.super.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/super_file_path"/>
            </provider>
            <!-- SuperSDK end -->
    
        </application>
    \`\`\``.replace(/</g, "&amp;lt;"))
    
    4 回复
    2 操作
    Vanessa 在 2022-09-23 15:15:48 更新了该回帖
    Vanessa 在 2022-09-23 15:15:11 更新了该回帖
  • lzsk 6 评论
    作者

    你好,那假如我要插入的 markdown 文档中,代码块只是其中一部分 那这种插入方法不就没用了吗,例如一篇 markdown 文档中不止有代码块 还有其他的文本格式 @Vanessa

    整段用 setValue
    Vanessa
    @Vanessa 问题是我想实现的功能是在原有的 markdown 文章插入其他的 markdown 文章,setValue 不是会清空掉原来的 markdown 吗
    lzsk
    @Vanessa 我想要的是在原来的 markdown 文本光标处插入一段别的 markdown,而这其中就会导致新插入的 markdown 文本里的代码块出现问题
    lzsk
    @lzsk 那就先 replace 试试
    Vanessa
    @Vanessa 用了你的代码发现是可以的 但是就是如我之前提的,如果是一整篇 markdown 在光标处插入另外一篇 markdown,插入的内容里面不单单是代码块,那这种该怎么解决呢
    lzsk
    @Vanessa 用了 replace 实验后发现代码块后面跟着外链链接 会把外链链接带到代码块里面去,也会出现出现错乱,我在下方发图片给你看下
    lzsk
  • lzsk 5 评论
    作者

    image.png

    image.png

    用了大佬的代码试了下 好像不行 @Vanessa

    最后一个是 &lt; 代码块中输入不进去。
    Vanessa
    @Vanessa 那要是代码块只是一整篇 markdown 文章的一部分,要怎么解决 insertValue 问题呢
    lzsk
    @Vanessa 我要不把整篇 markdown 文章上传给你,因为不单单是插入这一段代码块而已
    lzsk
    @lzsk 可以获取已有内容,然后加上添加的内容一起 setValue
    Vanessa
    @Vanessa 可那样如何在光标处插入呢,要我自己去获取光标处位置吗
    lzsk
  • lzsk
    作者

    不用插入 insertValue 而用 newVidtor 时 渲染是正确的:

    image.png

    @Vanessa

  • lzsk 12 评论
    作者

    @Vanessa 下图是使用 replace 会引发的问题

    image.png

    image.png

    看上去是对的。代码块是不会渲染链接的。
    Vanessa
    @Vanessa 不不不,第二张图其实是用 newVditor 的渲染,第一张图是用你提供的方法去渲染,然后出错了,原本应该跟在代码块后的链接,直接放到了代码块上去了
    lzsk
    @Vanessa 我可以把整篇 markdown 发给你吗,你可以试试用 insertValue 真的有 bug
    lzsk
    @lzsk insertValue 是特殊处理过的。可以使用 setValue
    Vanessa
    @Vanessa v 姐 我可以加你个 qq 啥的吗 方便沟通这个问题 可能是我表达有问题
    lzsk
    @Vanessa setValue 我晓得可以整篇替换,但是我的需求是在第一篇 md 的随意光标处插入第二篇 md,所以理论上说 setValue 不适用,而如果第二篇 md 只有代码块内容的话,确实可以使用大佬你提供的 replace 去解决,但是如果不只是代码块内容,就会出现问题,例如用来插入的 md 里的代码块后面有一个链接,我发现用 replace 就会将链接带到代码块里面去,就如我所发的图片那样子,求大佬解答
    lzsk
    @lzsk 随意光标处插入可能会有问题哦。md 语法被打断会造成更多的问题。
    Vanessa
    @Vanessa 那请问以后会有修复吗,我发现市面其他的编辑器,关于插入的 api 都没有这种问题,例如 vue-markdown-editor
    lzsk
    @lzsk 最近没有时间哦,你可以先用 vue-markdown-editor
    Vanessa
    @Vanessa 谢谢大佬解答 是我唐突了 嘻嘻
    lzsk
    @lzsk 没有没有,最近在肝思源笔记
    Vanessa
    @Vanessa 嗯呐 希望 vditor 越来越好
    lzsk
  • zzwwwwww

    @ Vanessa 从 vscode 复制 md 文档的时候 会自动在开头添加 ``` 代码块 末尾也会 如何去掉呢

请输入回帖内容 ...

推荐标签 标签

  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 52 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 47 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    197 引用 • 547 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 3 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 526 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1792 回帖 • 7 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 32 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 622 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • gRpc
    11 引用 • 9 回帖 • 61 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 388 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 584 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 624 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 621 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 124 关注