3

这种方法...

window.getSelection().anchorNode

...告诉我们文本的选择从哪里开始。

这种方法...

window.getSelection().focusNode

...告诉我们文本选择在哪里结束。

由于文本可以选择从左到右或从右到左拖动,这并不能anchorNode推断focusNode.

可以使用什么 DOM/JavaScript 方法来确定哪个引用节点位于文本选择的左侧?

澄清:这是为了修复startContainer()方法(window.getSelection().getRangeAt(0).startContainer)的错误,因此这是一个无效的建议。

4

2 回答 2

9

您通常会在and上使用Node.compareDocumentPosition(),“left”是道德上的等价物(当然,除非您有 RTL 文本)。我假设您实际上想知道文档中哪个排在第一位,而不是屏幕上的位置。像这样的东西会起作用:anchorNodefocusNodeDOCUMENT_POSITION_PRECEDING

let selection = window.getSelection();
let position = selection.anchorNode.compareDocumentPosition(selection.focusNode);
if (position & Node.DOCUMENT_POSITION_FOLLOWING)
  alert("Left-to-right selection");
else if (position & Node.DOCUMENT_POSITION_PRECEDING)
  alert("Right-to-left selection");
else
  alert("Only one node selected");
于 2012-05-22T22:00:30.097 回答
3

我为此使用的一种方法是,将 DOM 范围的结尾设置为文档中比范围开头更早的点会折叠范围:

function isSelectionBackwards() {
    var backwards = false;
    if (window.getSelection) {
        var sel = window.getSelection();
        if (!sel.isCollapsed) {
            var range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);
            backwards = range.collapsed;
            range.detach();
        }
    }
    return backwards;
}
于 2012-05-22T23:09:12.460 回答