javascript setCaret函数不一致
在过去的几天里,我读了无数关于在内容可编辑的div中设置插入符号位置的帖子。最后,我想出了我自己的整洁的小功能,它工作得非常漂亮。。。第一次。如果再次调用该函数,它似乎会突出显示页面中大量看似随机的内容,包括原始div之外的内容。下面是我的代码。如果有人能告诉我哪里出了问题,我会很感激的 (mod变量是内容可编辑div)javascript setCaret函数不一致,javascript,html,Javascript,Html,在过去的几天里,我读了无数关于在内容可编辑的div中设置插入符号位置的帖子。最后,我想出了我自己的整洁的小功能,它工作得非常漂亮。。。第一次。如果再次调用该函数,它似乎会突出显示页面中大量看似随机的内容,包括原始div之外的内容。下面是我的代码。如果有人能告诉我哪里出了问题,我会很感激的 (mod变量是内容可编辑div) var startNodeFound=false; var endNodeFound=true; 功能返回焦点(mod、start、end){ mod.focus(); var
var startNodeFound=false;
var endNodeFound=true;
功能返回焦点(mod、start、end){
mod.focus();
var range=document.createRange();
var sel=window.getSelection();
setCaret(范围,模式,开始,“开始”,错误);
如果(结束>0){
endNodeFound=false
setCaret(范围,模式,结束,“结束”,错误);
}
选择removeAllRanges();
选择添加范围(范围);
}
函数setCaret(范围、节点、偏移、位置){
var i=0;
var nodeCnt=node.childNodes.length;
而(!startNodeFound | | |!endNodeFound)&&i if(offset找到了解决方案。必须在returnFocus函数的末尾设置startNodeFound=false
var startNodeFound = false;
var endNodeFound = true;
function returnFocus(mod, start, end) {
mod.focus();
var range = document.createRange();
var sel = window.getSelection();
setCaret(range, mod, start, "start", false);
if (end > 0) {
endNodeFound = false
setCaret(range, mod, end, "end", false);
}
sel.removeAllRanges();
sel.addRange(range);
}
function setCaret(range, node, offset, position) {
var i = 0;
var nodeCnt = node.childNodes.length;
while ((!startNodeFound || !endNodeFound) && i < nodeCnt) {
var l = node.childNodes[i].length;
if (l == undefined) {
offset = setCaret(range, node.childNodes[i], offset, position)
} else {
if (offset <= l) {
switch (position) {
case "start":
if (!startNodeFound) {
startNodeFound = true;
range.setStart(node.childNodes[i], offset);
}
break;
case "end":
if (!endNodeFound) {
endNodeFound = true;
range.setEnd(node.childNodes[i], offset);
}
break;
}
} else {
offset -= l
}
}
i++;
}
return offset;
}