javascript设置插入功能不一致

时间:2014-05-09 10:37:09

标签: javascript html

在过去的几天里,我读过无数关于在内容可编辑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;
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

找到解决方案。不得不在returnFocus函数结束时设置startNodeFound = false。