6

たとえば、私はそのようなテキストを持っています:

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

[span1 sss in spaでテスト]を選択すると、選択した範囲の親スパンを削除して、選択したテキストを含む新しい範囲を作成したいと思います。

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

私はwindow.getSelection()、範囲、ノードを使用しています

助けてください!

4

1 に答える 1

8

deleteContents()これは、選択範囲から取得した範囲のtoString()およびinsertNode()メソッドを使用して行うことができます。

以下は、IE <= 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);
}
于 2013-03-05T16:42:13.153 に答える