如何按位置排序范围数组

How to order an array of ranges by position

我得到一个范围,在 div 和 contenteditable 模式下:

var sel = document.getSelection();
var range = sel.getRangeAt(0).cloneRange();
//...
comments.push(range);

div中的文字只有html个标签<br><mark>(高亮评论)。由于 range.startOffset 和 range.endOffset 涉及容器(而不是 div with contenteditable 模式),我不知道如何根据它们在文本中的位置(从上到下)对范围进行排序).

请帮帮我。

如果您想按起始位置对范围进行排序,可以使用

comments.sort(r1, r2) {
  var comp = r1.startContainer.compareDocumentPosition(r2.startContainer);
  if(comp & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
  if(comp & Node.DOCUMENT_POSITION_PRECEDING) return +1;
  return r1.startOffset - r2.startOffset;
}