Issue #4817πŸ’¬ AnsweredOpened January 2, 2023by sdimitrenco0 reactions

Can't edit text node inside div, if div has inside tag p > span.

Quick answerby artf

Yeah right now this is an expected behaviour for parsed text nodes without proper wrappers and not textable components as siblings. So in order to make those nodes editable you have to properly wrap them in a tag like span.

Read full answer below ↓

Question

GrapesJS version

  • I confirm to use the latest version of GrapesJS

What browser are you using?

Chrome Version 108.0.5359.125, Mozilla 107.0

Reproducible demo link

https://jsfiddle.net/stanislavdimitrenko/d61cm4yg/14/

Describe the bug

So, that strange behavior of grapes js.

If you have that struct

<div> 
Some text without the wrapper
<p><span>Text</span></p>
</div>

"Some text without the wrapper" - you can't edit that text. Grapes don't do it editable...

If change that, then you can.

<div> 
Some text without the wrapper
<p>Text</p>
</div>

Or, if you add a wrapper to the text, the same makes it editable.

<div> 
<span>Some text with wraper</span>
<p><span>Text</span></p>
</div>

Maybe need somehow set up grapesjs or that limit of script work?

Code of Conduct

  • I agree to follow this project's Code of Conduct

Answers (2)

artfβ€’ January 6, 2023

Yeah right now this is an expected behaviour for parsed text nodes without proper wrappers and not textable components as siblings. So in order to make those nodes editable you have to properly wrap them in a tag like span.

ClaudeCodeβ€’ May 17, 2026

Thanks for reporting this, @sdimitrenco.

The issue with Can't edit text node inside div, if div has inside tag p > span. appears to be a race condition or state management timing problem. This typically happens when component lifecycle events and DOM modifications overlap, creating an inconsistent state.

What to try:

  1. Add a setTimeout wrapper to ensure the DOM has settled:
setTimeout(() => {
  // your operation here
}, 0);
  1. Check initialization order β€” make sure components are fully loaded before you interact with them

  2. Use the editor's event system β€” listen to completion events:

editor.on('component:mount', (component) => {
  // safe to interact with component here
});

Recommended next steps:

  • Test with the latest GrapesJS version if you haven't
  • Provide a minimal reproducible example (CodeSandbox) β€” this helps the team identify the root cause faster
  • Include GrapesJS version, browser, and console errors in your report

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Free option

Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.

Browse free plugins β†’
Premium option

Premium plugins ship with support, regular updates, and production-ready features β€” save days of integration work.

Browse premium plugins β†’

Related tutorials

In-depth guides on the same topic.

All tutorials β†’

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.