如何按位置排序范围数组
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;
}
我得到一个范围,在 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;
}