DOM:确定anchorNode或focusNode是否在左侧

Joh*_*ohn 3 javascript dom

这个方法......

window.getSelection().anchorNode
Run Code Online (Sandbox Code Playgroud)

...告诉我们选择文本STARTS的位置.

这个方法......

window.getSelection().focusNode
Run Code Online (Sandbox Code Playgroud)

...告诉我们文本选择ENDS的位置.

由于文本可以选择从左向右或从右向左拖动,因此不会推断文本anchorNode位于左侧focusNode.

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

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

Wla*_*ant 6

你通常会使用Node.compareDocumentPosition(),anchorNodefocusNode"left"是道德等价物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");
Run Code Online (Sandbox Code Playgroud)

  • 对于完整的实现,您需要考虑“anchorNode”和“focusNode”相同的情况。为此,您需要比较“anchorOffset”和“focusOffset”。 (2认同)