HTML contenteditable with non-editable islands
Solution 1:
I'm a CKEditor developer. We've got some experience with nested readonly elements (i.e. placeholder
plugin and the feature we're working on currently #9764) and I don't have good news. You have to handle every behaviour manually if you want to have consistent look&feel. There are no tricks that will fix browsers. And many things (like this with weird things happening around input on GC) seem to be unsolvable.
Solution 2:
One more idea that looks promising:
To use empty span with ::before { content:"caption"; }
that should produce non editable block represented in in DOM as a node having no caret positions inside.
You can try it here http://jsfiddle.net/TwVzt/1/
But this approach is not free of problems (in my case): There is no way to declare ::before
inline using style DOM attribute and so the whole set should be declared in CSS upfront.
But set of merge codes I have is pretty large, even unknown upfront in full in some use cases. Sigh.
Nevertheless putting this recipe here if someone will have better circumstances (known set of codes).