选择后如何插入节点?

How to insert a node after a selection?

我需要在注释节点中包装一个选择,以便稍后对其进行解析。

此脚本在 CK-Editor 插件中执行,但我相信 selectionrange 的工作方式是 JavaScript 的原生方式。

我能够很好地在范围的开头插入注释节点,但我不知道如何在选择的末尾添加注释节点。

我当前的代码是:

var selection = editor.getSelection();
var ranges = selection.getRanges();
var start_node = 'parsing_start';
var end_node = 'parsing_end';
var start_comment = new CKEDITOR.dom.comment(start_node);
var end_comment = new CKEDITOR.dom.comment(end_node);

ranges[0].insertNode(start_comment);

ranges[0].nextSibling().insertNode(end_comment); // how to do this???

尝试在原始 selection 之后 select 一个新的空范围。唯一的缺点是你失去了原来的 selection.

var selection = editor.getSelection();
var range = selection.getRanges()[0];
var start_node = 'parsing_start';
var end_node = 'parsing_end';
var start_comment = new CKEDITOR.dom.comment(start_node);
var end_comment = new CKEDITOR.dom.comment(end_node);

range.insertNode(start_comment);

var endNode = range.endContainer;
var endOffset = range.endOffset;
range.setStart(endNode, endOffset);
range.setEnd(endNode, endOffset);
selection.selectRanges([range]);

range.insertNode(end_comment);

editor.focus();