You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TipTap编辑器中使用HTML pre预格式化标签?

在TipTap中使用HTML
标签保留空白(无需code-block扩展) 

当然可以直接在TipTap中实现支持<pre>标签的功能,完全不需要依赖code-block扩展,这样既能保留空白字符,又允许在预格式化内容中使用其他行内样式。下面是具体实现方案:

1. 自定义
节点扩展 

TipTap基于ProseMirror,你可以快速创建一个自定义扩展来注册<pre>节点,配置它允许包含任意行内元素和标记:

import { Node } from '@tiptap/core'

const Pre = Node.create({
  name: 'pre',
  group: 'block',
  content: 'inline*',
  marks: '_', // 允许所有行内标记(加粗、斜体、链接等)
  parseHTML() {
    return [{ tag: 'pre' }]
  },
  renderHTML({ HTMLAttributes }) {
    return ['pre', HTMLAttributes, 0]
  },
  // 可选:添加快捷键快速切换pre格式
  addKeyboardShortcuts() {
    return {
      'Mod-Shift-p': () => this.editor.commands.toggleNode('pre', 'paragraph'),
    }
  },
})

2. 注册扩展到编辑器

初始化TipTap编辑器时,将自定义的Pre扩展加入扩展列表:

import { Editor } from '@tiptap/core'
import StarterKit from '@tiptap/starter-kit'

const editor = new Editor({
  element: document.querySelector('.tiptap'),
  extensions: [
    StarterKit,
    Pre, // 加入自定义pre扩展
  ],
  // 示例内容:验证pre标签的空白保留效果
  content: '<p>普通段落内容</p><pre>这里的 多个空格 会被 完整保留\n换行也能正常显示\n还可以添加**加粗**或者*斜体*样式</pre>',
})

3. 自定义样式(可选)

浏览器默认的<pre>标签带有灰色背景和等宽字体,如果你不需要这些样式,可以通过CSS覆盖:

.tiptap pre {
  background: transparent;
  font-family: inherit;
  padding: 0;
  white-space: pre-wrap; /* 可选:让超长文本自动换行,避免横向滚动 */
}

这种方案的核心优势是:既保留了<pre>标签的空白字符保留特性,又完全放开了内容样式限制,用户可以在预格式化块内使用任意行内样式,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Grav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:35:26