如何从所选范围中删除所有节点

时间:2013-03-05 05:28:12

标签: javascript range selection

例如,我有这样的文字:

Some test <span> in span1</span> sss <span>in span2</span> end of text.

当我选择“测试spa中的span1 sss”时,我想删除所选范围的父跨度并创建新范围 这将包含我选择的文字。

Some<span> test in span1 sss in spa</span>n2 end of text.

我正在使用window.getSelection(),范围,节点

请帮忙!

1 个答案:

答案 0 :(得分:4)

您可以使用从所选内容中获得的范围的deleteContents()toString()insertNode()方法执行此操作。

以下内容适用于除IE&lt; = 8之外的所有主流浏览器。对于这些浏览器,您需要采用不同的方法,如果需要,我可以概述。

演示:http://jsfiddle.net/HUm2K/

代码:

var sel = window.getSelection();
if (sel.rangeCount > 0) {
    var range = sel.getRangeAt(0);
    var newSpan = document.createElement("span");
    var selectedTextNode = document.createTextNode( range.toString() );
    newSpan.appendChild(selectedTextNode);
    range.deleteContents();
    range.insertNode(newSpan);
    range.selectNode(newSpan);
    sel.removeAllRanges();
    sel.addRange(range);
}