Это можно сделать с помощью API выбора:
div { border:2px solid red; padding:10px; margin:10px; }
span { background-color:yellow; }
Примечание . Вышеприведенный пример упрощен. См. Ссылку SO, приведенную ниже, для полного решения проблемы выбора.
Демо (также на jsFiddle ):
<div contenteditable>
BEFORE
<span>SPAN</span>
AFTER
</div>
<p>
Click on the yellow SPAN element (to place the caret inside it), and then press a character key (to change the text-content of the SPAN element). The alert-box shows that the event-target is the DIV element, not the SPAN element...
</p>
<div id="stuff"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
div
<span>
Рекомендации:
- https://developer.mozilla.org/en/DOM/Selection/anchorNode
- Как я могу получить элемент DOM, который содержит текущий выбор?