Grapesjs 在 html 中用 localStorage 在 ID 上添加“-2”
只有在你附加包含已定义 ID 的 HTML 时才会发生,所以编辑器会递增它以避免冲突。 你确定不会重复添加相同内容吗?! 无论如何,进行检查的函数在这里: https://github.com/artf/grapesjs/blob/dev/src/domcomponents/model/Component.js#L1262 这里用的是(添加新内容时): https://github.com/artf/grapesjs/blob/dev/src/domcomponents/model/Components.js#L51
阅读下方完整回答 ↓问题
我试着在你的演示中复现这个问题,但没成功,但现在遇到了最奇怪的问题。 我希望你能在调试时指点我正确的方向。
一旦我把html存到localStorage并刷新页面(你会看到屏幕录制中短暂停顿),grapesjs会神奇地在HTML中的每个ID上加上“-2”。请看下面的屏幕播放:

你能想到这可能出现在你的代码中哪里吗?为什么?我该如何避免这种情况?
谢谢@artf
回答(3)
只有在你附加包含已定义 ID 的 HTML 时才会发生,所以编辑器会递增它以避免冲突。 你确定不会重复添加相同内容吗?!
无论如何,进行检查的函数在这里: https://github.com/artf/grapesjs/blob/dev/src/dom_components/model/Component.js#L1262
这里用的是(添加新内容时): https://github.com/artf/grapesjs/blob/dev/src/dom_components/model/Components.js#L51
你用的是最新版本吗?
@artf,是的,我有。0.15.9,虽然之前的版本也是一样。我尝试移除所有插件以保持系统非常干净,但只要生成localStorage,仍然会出现这个问题。有人知道为什么或者在哪里生成这个功能以便我调试吗?
相关问答
通过相似的问题讨论继续研究。
问题 #2834
Grapesjs 不会为包装器初始化样式
你好,我遇到了一个 bug grapesjs 无法初始化 wrapper 的样式。繁殖步骤:前往 https://grapesjs.com/demo.html选择包装并设置背景。它会为样式添加“正体”规则,并且会显示在样式设置中刷新页面——“正文”规则依然存在(你可以在“查看代...
问题 #4559
RTE操作第一次后就无法正常使用
嗨..!,RTE操作第一次后就不起作用了,当我们尝试对之前应用的元素应用该动作时,它无法正常工作 从版本0.18.3到最新版本都会出现这个问题,以下版本运行正常 复制链接 工作版本: https://jsfiddle.net/76gnxh4d/35/ 无法正常工作的版本: ht...
问题 #4024
当将文本粘贴到文本中时,视图会滚动并失去焦点
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 铬 可复制演示链接 https://grapesjs.com/demo-newsletter-editor.html 描述一下那个虫子 如何复现这个漏洞?https://grapesjs.com/...
问题 #3130
标准方法:对HTML工具栏和徽章进行轻微重构
版本: '0.15.10' 这个问题旨在验证是否有合适的方法通过自定义插件扩展当前 https://github.com/artf/grapesjs/blob/master/src/canvas/view/CanvasView.js。我们特别回顾了该文件中的“render()”...
与此问题匹配的付费插件
根据问题关键词和标签相关性精选,助你更快交付。
正在加载付费插件推荐……
相关教程
关于同一主题的深入指南。
教程
Vanilla GrapesJS vs GrapesJS With Plugins: What You Actually Get Out of the Box (2026)
New to GrapesJS? See exactly what the stock editor gives you, where it falls short, and which plugins close the gaps — a beginner-friendly 2026 comparison
教程
Lighthouse for GrapesJS: Audit Accessibility and SEO Without Leaving the Editor
Live WCAG 2.1/2.2 accessibility auditor + SEO manager for GrapesJS. Every finding is bound to the exact component — click to select, then one-click fix.
教程
GrapesJS DevTools: A Developer Panel Inside Your Editor
If you've ever debugged GrapesJS with console.log(editor.getSelected()) and a dozen throwaway event listeners — this post is for you.
浏览插件分类
直接跳转到市场上的插件分类页面。