3

この方法...

window.getSelection().anchorNode

...テキストの選択がどこから始まるかを教えてくれます。

この方法...

window.getSelection().focusNode

...テキストの選択がどこで終了するかを教えてくれます。

テキストは左から右または右から左へのドラッグを選択できるため、これはanchorNodeが の左側にあると推論しませんfocusNode

どの参照ノードがテキスト選択の左側にあるかを判断するために使用できる DOM/JavaScript メソッドはどれですか?

startContainer()明確化: これはメソッド ( )のバグを修正するためのものであるため、window.getSelection().getRangeAt(0).startContainerこれは無効な提案です。

4

2 に答える 2

9

通常はNode.compareDocumentPosition() on anchorNodeand を使用しますfocusNode。「左」はDOCUMENT_POSITION_PRECEDING(もちろん RTL テキストがない限り) と道徳的に同等です。画面上の位置ではなく、ドキュメントの最初に来るものを実際に知りたいと思います。このようなものが動作します:

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 Range の終了を範囲の開始よりもドキュメント内の前のポイントに設定すると、範囲が折りたたまれるという事実を利用しています。

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 に答える