Document: caretPositionFromPoint() メソッド
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
caretPositionFromPoint()
は Document
インターフェイスのメソッドで、この DOM ノードを含む CaretPosition
オブジェクトを、そのノード内のキャレットとキャレットの文字オフセットと共に返します。
構文
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) {
// WebKit 独自の代替メソッドを使用
range = document.caretRangeFromPoint(e.clientX, e.clientY);
textNode = range.startContainer;
offset = range.startOffset;
} else {
// どちらのメソッドも対応していなければ、何もしない
return;
}
// TEXT_NODE のみを分割
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>
仕様書
Specification |
---|
CSSOM View Module # dom-document-caretpositionfrompoint |
ブラウザーの互換性
Report problems with this compatibility data on GitHubdesktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
caretPositionFromPoint | ||||||||||||
options parameter |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- In development. Supported in a pre-release version.
- In development. Supported in a pre-release version.
- No support
- No support
- Has more compatibility info.
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.