Document: caretPositionFromPoint() 方法

有限可用性

此功能并非基础功能,因为它在一些最广泛使用的浏览器中无法正常工作。

caretPositionFromPoint()Document 接口的方法,它返回一个 CaretPosition 对象,其中包含 DOM 节点,以及插入符号和该节点内插入符号的字符偏移量。

语法

js
caretPositionFromPoint(x, y)

参数

x

点的水平坐标。

y

点的垂直坐标。

返回值

一个 CaretPosition 对象。

示例

在下面的 演示 段落中的任意位置单击,以在您单击的位置插入换行符。其代码位于演示下方。

演示

下面的代码首先检查 document.caretPositionFromPoint 的支持情况,但如果浏览器不支持该方法,则代码会检查 document.caretRangeFromPoint,并改用该方法。

JavaScript

js
function insertBreakAtPoint(e) {
  let range;
  let textNode;
  let offset;

  if (document.caretPositionFromPoint) {
    range = document.caretPositionFromPoint(e.clientX, e.clientY);
    textNode = range.offsetNode;
    offset = range.offset;
  } else if (document.caretRangeFromPoint) {
    // Use WebKit-proprietary fallback method
    range = document.caretRangeFromPoint(e.clientX, e.clientY);
    textNode = range.startContainer;
    offset = range.startOffset;
  } else {
    // Neither method is supported, do nothing
    return;
  }
  // Only split TEXT_NODEs
  if (textNode?.nodeType === 3) {
    let replacement = textNode.splitText(offset);
    let br = document.createElement("br");
    textNode.parentNode.insertBefore(br, replacement);
  }
}

let paragraphs = document.getElementsByTagName("p");
for (const paragraph of paragraphs) {
  paragraph.addEventListener("click", insertBreakAtPoint, false);
}

HTML

html
<p>
  Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
  eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
  voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
  kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
</p>

规范

规范
CSSOM 视图模块
# dom-document-caretpositionfrompoint

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅