W3C で DOM Range という便利なオブジェクトが勧告されています。
http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
DOM Range って何?
DOM Range とは、 DOM ツリーの任意の範囲を表すための仕様です。
DOM Range を使うと、「ここからここまでのノードを全部削除」とか「ここからここまでの要素をここに移動」というような操作が簡単にできます。
もちろん、ノードの途中も選択できます。
また、 DOM Range はコンテンツをマウスなどで選択したときの選択範囲を表す Selection オブジェクトからも使われています。
(ちなみに Selection オブジェクトの仕様は HTML5 で定義されています。 http://www.whatwg.org/specs/web-apps/current-work/#selection1)
そろそろ、ちゃんと DOM Range 使いたい!
というわけで、テストを書きました。
まだまだ、バグがある
どこがバグってるのか細かくは見てないのですが、どのブラウザもそれなりにバグってる感じですね。
僕のテストが間違ってたら教えてください。