内容可编辑DIV单击/插入符号设置
Content Editable DIV Clicking/caret Setting
我有一个标准的内容可编辑div:
<div id="profileBody" class="customInputDiv" contentEditable='true' autocomplete="off"></div>
基本上,我想检测光标在某个事件上的位置(最好是onclick
、keydown
或按钮上的代码)。
类似的内容:onkeydown
-保存div中的插入符号位置,然后设置插入符号位置。
这听起来有点傻,但这是必需的,因为在某些事件中,我会稍微更改内容,并且在进行操作时,光标位置会发生变化,这非常令人讨厌。
我讨厌在没有我尝试过的例子的情况下提问,但如果你读过以前的问题,我总是非常详细地提供我尝试过什么,在这里就死定了!
function setCaret() {
var el = document.getElementById("editable");
var range = document.createRange();
var sel = window.getSelection();
range.setStart(el.childNodes[2], 5);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
el.focus();
}
也许是解析window.getSelection();
数据的好方法?
找到:http://jsfiddle.net/s5xAr/3/但我不想要——只希望它使用一个函数来获得插入符号的位置,并设置它,例如
getCaretPOS();
//do something
setCaretPOS();
这个代码会设置它,但获取它似乎是个问题。。
要获取插入符号位置,请使用以下函数:
function getCaretPosition(editableDiv) {
var caretPos = 0, containerEl = null, sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
这应该适用于大多数浏览器(当然,离开IE)。你的setCaret
功能似乎覆盖了IE。
该函数来自另一个SO答案。还可以看看评论。
演示
相关文章:
- 插入符号到底是什么
- 将插入符号位置移动到ContentEditable<DIV>
- 为更改的输入返回插入符号位置的逻辑
- 内容可编辑DIV单击/插入符号设置
- 在contentEditable元素中居中占位符插入符号
- 获取插入符号相对于行可见起点的位置
- JavaScript 插入符号位置
- 链接内的内容可编辑块,如何防止重定向,但让文本选择插入符号位置更改
- 如何更改文本区域中闪烁的光标/插入符号
- Caret函数没有'如果插入符号在最后一个位置,就不能正常工作
- 如何使用javascript获取&使用字符偏移量设置插入符号位置
- text使用shift键和箭头键时的区域插入符号位置
- Rangy和IE8-在段落末尾的元素后面放置插入符号
- HTML Texeare 插入符号控件使用左、右、下、上、主页和结束虚拟按钮
- 在插入符号位置获取DOM元素
- 单击时获取文本区域中插入符号的位置
- 正则表达式替换为插入符号
- 我可以使用或打开'插入'现代浏览器中使用javascript的插入符号
- 如何在contenteditable中跟踪插入符号/光标
- tinymce丢失插入符号位置