在过去的几天里,我读过无数关于在内容可编辑div中设置插入位置的帖子。最后,我提出了我自己的整洁的小功能,它可以很好地工作......第一次。如果再次调用该函数,它似乎突出显示了一些看似随机的页面内容,包括原始div之外的内容。我的代码如下。如果有人可以对可能出错的问题以及如何解决问题进行说明,我将不胜感激。
(“mod”变量是内容可编辑div)
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;
}
有什么想法吗?
答案 0 :(得分:0)
找到解决方案。不得不在returnFocus函数结束时设置startNodeFound = false。