所以我有一个方法来获取一个标签,并将选定的文本包装在该标签中.
function wrap(tag) { var sel,range; if (window.getSelection) { sel = window.getSelection(); if (sel.rangeCount) { range = sel.getRangeAt(0); var selectedText = range.toString(); range.deleteContents(); range.insertNode(document.createTextNode('['+tag+']'+selectedText+'[/'+tag+']')); } } }
但是,这个问题是在完成文本包装之后插入插入文本的插入符(插入符之前)插入该节点.
有没有插入文本的方法,并且插入符号留在最后?
请注意,如果没有使用jQuery或任何其他库,可以这样做.我只需要它在webkit(Safari)中工作.
解决方法
您可以使用range.setStartAfter和range.setEndAfter方法将起点和终点设置为新节点之后的点.我在这里设置一个jsfiddle示例:
http://jsfiddle.net/phil_mcc/tM3mA/
//move the caret range.setStartAfter(newNode); range.setEndAfter(newNode); sel.removeAllRanges(); sel.addRange(range);