This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
This method is used to retrieve the caret position in a document based on two coordinates. A CaretPosition
is returned, containing the found DOM node and the character offset in that node.
var caretPosition = document.caretPositionFromPoint(float x, float y);
One of the following:
CaretPosition
.Null
, if x or y are negative, outside viewport, or there is no text entry node.This example inserts line breaks wherever you click. The code for it is below the demo.
<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>
function insertBreakAtPoint(e) { var range; var textNode; var offset; if (document.caretPositionFromPoint) { range = document.caretPositionFromPoint(e.clientX, e.clientY); textNode = range.offsetNode; offset = range.offset; } else if (document.caretRangeFromPoint) { range = document.caretRangeFromPoint(e.clientX, e.clientY); textNode = range.startContainer; offset = range.startOffset; } // only split TEXT_NODEs if (textNode.nodeType == 3) { var replacement = textNode.splitText(offset); var br = document.createElement('br'); textNode.parentNode.insertBefore(br, replacement); } } window.onload = function (){ var paragraphs = document.getElementsByTagName("p"); for (i=0 ; i < paragraphs.length; i++) { paragraphs[i].addEventListener("click", insertBreakAtPoint, false); } };
Specification | Status | Comment |
---|---|---|
CSS Object Model (CSSOM) View Module The definition of ' caretPositionFromPoint ' in that specification. | Working Draft | Initial definition |
Feature | Chrome | Firefox | Edge | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | No support[1] | 20.0 (20.0)[2] | No support[1] | No support[3] | No support[1] | No support[1] |
Feature | Android | Firefox Mobile | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | No support | 20.0 (20.0)[2] | No support | No support | No support |
[1] WebKit, Blink and MS Edge has implemented document.caretRangeFromPoint(x,y)
from an older W3C draft. Also, note that a Range
is returned.
[2] Offsets in <textarea>
and <iframe>
elements aren't correct - see bug 824965 and bug 826069 for details.
[3] For MS Internet Explorer the proprietary method TextRange.moveToPoint(x,y)
might be helpful.
CaretPosition
Range
Text
Selection
window.getSelection
Range.getBoundingClientRect()
- the inverse for this method (get coordinates of a range)Document.elementFromPoint()
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/document/caretPositionFromPoint