Document: caretPositionFromPoint() 方法
caretPositionFromPoint()
是 Document
接口的方法,它返回一个 CaretPosition
对象,其中包含 DOM 节点,以及插入符号和该节点内插入符号的字符偏移量。
语法
js
caretPositionFromPoint(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 的浏览器中加载。