Javascript Range.compareBoundaryPoints()生成奇怪的结果

Javascript Range.compareBoundaryPoints()生成奇怪的结果,javascript,Javascript,我使用一个范围对象作为表示当前选择的另一个范围对象上的限制器,这样,在选定范围内但在限制范围边界之外的任何对象都会被修剪掉。为了比较这两个范围的位置,我使用了Range.compareBoundaryPoints()函数,但结果毫无意义 我使用的元素如下所示: <p id="myBlock" contenteditable="true"> Hello hello hello, this is a great big block of test text. </p>

我使用一个范围对象作为表示当前选择的另一个范围对象上的限制器,这样,在选定范围内但在限制范围边界之外的任何对象都会被修剪掉。为了比较这两个范围的位置,我使用了Range.compareBoundaryPoints()函数,但结果毫无意义

我使用的元素如下所示:

<p id="myBlock" contenteditable="true">
  Hello hello hello, this is a great big block of test text.
</p>
然后在文本中选择单词“this”并运行该函数。我的范围如下所示(我发明了.start和.end符号,试图让我的描述更清楚):

(limitingRange.start)你好你好,(selectedRange.start)这(selectedRange.end)是一个很大的测试文本块。(limitingRange.end)

结果值为:
endToStart=-1
startToEnd=1
startToStart=-1
endToEnd=1


我对如何解释函数的结果感到困惑。例如,根据规范,如果selectedRange的结尾在limitingRange的开始之前,endToStart应该包含-1,但情况显然不是这样。这里发生了什么?

我在回答我自己的问题:输入发生了什么让我真正理解了函数的行为,这真的很奇怪

a.compareBoundaryPoints(X_到Y,b)的结果是a.Y到b.X的比较-如果a.Y在b.X之前,则为1,如果它们位于相同位置,则为0,如果在b.X之后,则为1

因此,在上例中的endToStart中,limitingRange.start将与selectedRange.end进行比较,其中-1表示limitingRange.start位于第一位

startToEnd:limitingRange.end位于selectedRange.start之后,因此结果为1。
startToStart:limitingRange.start位于selectedRange.start之前,因此结果为-1。
endToEnd:limitingRange.end位于selectedRange.end之后,因此结果为1

留给我的只有一个问题:为什么这个函数会这样运行?常数的名称与人们直觉上的预期相反

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);