插入节点后插入插入符号

时间:2012-03-22 18:51:21

标签: javascript

所以我有一个方法,它接受一个标记并包装该标记中的选定文本。

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)中工作。

2 个答案:

答案 0 :(得分:20)

您可以使用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);

答案 1 :(得分:1)

将节点插入范围后执行此操作 range.collapse(false); 这会将选择范围的位置改变到范围的末尾,所以我的猜测是它应该将光标设置在结束位置