[代码片段] 如何在contenteditable的div中设置和获取光标位置?
时间: 2023-12-10 10:03:29 浏览: 130
Vue中div contenteditable 的光标定位方法
5星 · 资源好评率100%
要在`contenteditable`的`div`中设置和获取光标位置,可以使用`Selection`对象和`Range`对象。下面是一个示例代码片段:
```javascript
function getCaretPosition(element) {
let caretOffset = 0;
const range = window.getSelection().getRangeAt(0);
const preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
return caretOffset;
}
function setCaretPosition(element, caretPos) {
const range = document.createRange();
const sel = window.getSelection();
let currentNode = element;
let charCount = 0;
while (currentNode && charCount < caretPos) {
if (currentNode.nodeType === Node.TEXT_NODE) {
charCount += currentNode.length;
} else {
const { childNodes } = currentNode;
for (let i = 0; i < childNodes.length; i += 1) {
range.selectNodeContents(childNodes[i]);
charCount += range.toString().length;
}
}
if (charCount > caretPos) {
range.setStart(currentNode, currentNode.length + caretPos - charCount);
sel.removeAllRanges();
sel.addRange(range);
break;
}
currentNode = currentNode.nextSibling;
}
}
```
其中,`getCaretPosition`函数可以获取当前光标在`element`中的位置,`setCaretPosition`函数可以将光标设置到`element`的指定位置。你可以在需要的时候调用这两个函数来设置和获取光标位置。
阅读全文