Я знаком с вставкой текстовых узлов после или перед заданным ссылочным узлом. Но я хотел бы знать, как вставить тег между текстом в данном узле. Например,
Before insertion: <p>Lorem dolor</p>
After insertion: <p>Lorem <span>ipsum</span> dolor</p>
Узел диапазона должен быть вставлен после N символов (мне не нужна позиция выбора курсора пользователя) в другом другом узле. Это возможно?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете проверить свойство innerHTML узлов и изменить его. В качестве альтернативы вы можете посмотреть коллекцию childNodes и поработать там с элементами (удалив старый текстовый узел и вставив на его место новые узлы).
Вам нужно поместить текст в переменную, а затем удалить его из DOM. Разделите его, затем вставьте первую часть, затем узел диапазона, затем вторую часть.
var p = document.getElementById('myParagraph');
var text = p.childNodes[0];
// Split the text
var len = 5
var text1 = text.nodeValue.substr(0, len);
var text2 = text.nodeValue.substr(len);
var span = document.createElement('span');
span.appendChild(document.createTextNode(' dolor'));
// Remove the existing text
p.removeChild(p.childNodes[0]);
// Put the new text in
p.appendChild(document.createTextNode(text1));
p.appendChild(span);
p.appendChild(document.createTextNode(text2));
Правильный способ (с использованием интерфейсов DOM-Core):
var p = document.getElementById('myParagraph');
var text = p.childNodes[0];
var at = 5;
// create new span node with content
var span = document.createElement("span");
span.appendChild(document.createTextNode('ipsum'));
// Split the text node into two and add new span
p.insertBefore(span, text.splitText(at));
Ответ с использованием
splitTextпроще и требует меньше строк кода.