Range オブジェクトを、現在の選択範囲を表す別の Range オブジェクトのリミッターとして使用しています。これにより、選択範囲内にあるが制限範囲の境界外にあるものはすべて削除されます。2 つの範囲の位置を比較するために、Range.compareBoundaryPoints() 関数を使用していますが、結果は意味がありません。
私が扱っている要素は次のようになります。
<p id="myBlock" contenteditable="true">
Hello hello hello, this is a great big block of test text.
</p>
範囲が定義され、その位置関係が次のように取得されます。
var limitingRange = document.createRange();
limitingRange.selectNodeContents($('#myBlock')[0]);
var selectedRange = window.getSelection().getRangeAt(0).cloneRange(); //Use whatever method is supported by the browser to get the Range
var endToStart = limitingRange.compareBoundaryPoints(Range.END_TO_START, selectedRange);
var startToEnd = limitingRange.compareBoundaryPoints(Range.START_TO_END, selectedRange);
var startToStart = limitingRange.compareBoundaryPoints(Range.START_TO_START, selectedRange);
var endToEnd = limitingRange.compareBoundaryPoints(Range.END_TO_END, selectedRange);
次に、テキストで「this」という単語を選択し、関数を実行します。私の範囲は次のようになります (説明を明確にするために .start および .end 表記を発明しています):
(limitingRange.start)こんにちは、こんにちは、(selectedRange.start)this(selectedRange.end) は、テスト テキストの大きなブロックです。(limitingRange.end)
結果の値は次の
とおりです。
endToStart = -1
startToEnd = 1
startToStart = -1
endToEnd = 1
関数の結果をどのように解釈するかについて、私は困惑しています。仕様に基づいて、たとえば、selectedRange の終わりが limitedRange の開始前に来る場合、endToStart には -1 を含める必要があるように見えますが、明らかにそうではありません。何が起きてる?