このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Document: caretPositionFromPoint() メソッド
Baseline 2025 *Newly available
Since December 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
* Some parts of this feature may have varying levels of support.
caretPositionFromPoint() はDocument インターフェイスのメソッドで、この DOM ノードを含むCaretPosition オブジェクトを、そのノード内のキャレットとキャレットの文字オフセットと共に返します。
In this article
構文
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);}let message = document.getElementById("message");if (document.caretPositionFromPoint) { message.textContent = "このブラウザーは標準の document.caretPositionFromPoint に対応しています"; message.classList.add("supported");} else if (document.caretRangeFromPoint) { message.textContent = "このブラウザーは標準外の document.caretRangeFromPoint に対応しています"; message.classList.add("supported");}HTML
<div> このブラウザーは document.caretRangeFromPoint にも document.caretPositionFromPoint にも対応していません。</div>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>#message { color: red; font-weight: bold;}#message.fallback { color: darkorange;}#message.supported { color: green;}仕様書
| Specification |
|---|
| CSSOM View Module> # dom-document-caretpositionfrompoint> |