执行正则表达式后,基本上只是删除可编辑 div 中的 HTML 元素,执行 innerHTML 后插入符号位置丢失。即使你保存了编辑的最后一个位置,我也无法以某种方式恢复我的插入符号。所有的想法都受到高度赞赏!
这是我的完整代码:
<html>
<head>
<script>
var lastPos = 0;
function getCaretCharacterOffsetWithin(element) {
var caretOffset = 0;
if (typeof window.getSelection != "undefined") {
var range = window.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
} else if (typeof document.selection != "undefined" && document.selection.type != "Control") {
var textRange = document.selection.createRange();
var preCaretTextRange = document.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}
function showOldCaretPos() {
console.log(lastPos);
}
function showCaretPos() {
var el = document.getElementById("test");
var caretPosEl = document.getElementById("caretPos");
lastPos = getCaretCharacterOffsetWithin(el);
caretPosEl.innerHTML = "Caret position: " + lastPos;
}
window.onload=function(){
document.body.onkeydown = showOldCaretPos;
document.body.onmousedown = showOldCaretPos;
document.body.onkeyup = showCaretPos;
document.body.onmouseup = showCaretPos;
};
function testFun(ele){
var input = ele.innerHTML.replace(/<(.*?)>/g,"");
var output = input;
ele.innerHTML = output;
}
</script>
</head>
<body>
<div id="test" contenteditable="true" onKeyUp="testFun(this);"><font color="red">something</font>something<font color="blue">something</font></div>
<div id="caretPos"></div>
</body>
</html>