Предполагая, что вы заинтересованы только в удалении не выделенных текстовых узлов, это может сработать для вас.
var selectedTextOfFirstNode = '';
//for simplicity assuming one selected range
var range = window.getSelection().getRangeAt(0);
if (range.startContainer.nodeType == 3)
selectedTextOfFirstNode = range.startContainer.textContent
.substring(range.startOffset);
Это дает строку "selection."
и оставляет текст, который не выделен.Вы можете сделать то же самое с range.endContainer
Теперь вы можете создавать текстовые узлы, используя этот текст, если вас интересуют узлы, а не выделенный текст.