11

したがって、テキストのブロックを含む div があり、以前にユーザーがこのブロック内のテキストを選択し、この選択から範囲オブジェクトを作成しました。選択したテキストの開始点と終了点のオフセットを保存しましたが、範囲を再作成するのに問題があります (操作できるようにするため)。"quotables" は、すべてのテキストを保持する div です。何が間違っているのかわかりません。



    var theRange = rangy.createRange();
    var node = $('.quotables').html();
    theRange.setStart(node, 14);
    theRange.setEnd(node, 318);


しかし、エラーが発生し続けます: Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
m.setStart
(anonymous function)
d.extend._Deferred.f.resolveWith
ddextend.ready
dcaddEventListener.y

4

1 に答える 1

17

Range 境界は、HTML の文字列表現内の文字オフセットではありません。むしろ、DOM ノード内のオフセットです。たとえば、ノードがテキスト ノードの場合、境界はノードのテキスト内の文字オフセットとして表されます。ノードが要素の場合、境界より前のノードの子ノードの数として表されます。たとえば、次の HTML では、境界が で示される Range を使用しています|

<div id="test">foo|bar<br>|<br></div>

... 範囲の開始境界は<div>要素の最初の子であるテキスト ノードのオフセット 3 にあり、終了境界は 内のオフセット 2 にあります。<div>これは、2 つの子ノード (テキスト ノード「foobar」と 1 つの<br>要素) があるためです。 ) 境界の前に横たわっています。次のようにプログラムで範囲を作成します。

var range = rangy.createRange(); // document.createRange() if not using Rangy
var div = document.getElementById("test");
range.setStart(div.firstChild, 3);
range.setEnd(div, 2);
于 2011-08-04T10:34:54.820 に答える