I have a text like
<AnyTag>here is a sample test text and more text</AnyTag>.
Now I am selecting “test” and clicking an italic button in my page and it creates a new element <span class="ItalicClass"> and it surroundContents(). This woks fine.
Now I have text like
<AnyTag>here is a <i>sample test text</i> and more text</AnyTag>.
Now if I select “test” it does the same but I would like to close the parent first and then insert the new element. I know the parentNode hence I can insert a new class in the span element. Same way I need to open the same parent after the end of new element. The the final line should be
<AnyTag>here is a <i>sample </i><span class="ClassB">test</span><i> text</i> and more text</AnyTag>
If I select the word “more” then
<AnyTag>here is a <i>sample test text</i> and <span class="ClassA">more</span> text</AnyTag>.
Appreciate any pointers in this regard.
Regards
Dominic
First, you’ll need to split the text node containing ‘sample test text’ at two indexes so that you have three side by side text nodes: ‘sample ‘, ‘test’, and ‘ text’. (Note the spaces in sample and text).
Second, create a range that encompasses the start of the parent node to the end of ‘sample ‘ text node. Extract the contents.
Repeat those same steps, this time creating a range from the start of the text node ‘ text’ to the end of the parent.
Finally, the unwrap the contents of the original parent node ‘i’ and re-wrap it with your new tag.
If any of this isn’t clear, let me know. I’ve been building a WYSIWYG editor and have tested this idea thoroughly.