在contenteditable div中选择文本

时间:2014-06-10 13:09:42

标签: javascript jquery html rangy

我需要能够在给定光标位置和数字的情况下选择div中的文本。我已经在这里尝试了很多例子,它们有一个问题:如果你在一个新行的开头,选择从前一行的最后一个字符到当前字符(插入位置),如果有任何换行符在选择完成后插入文本时,它们将被删除,因此文本将插入到上一行的末尾..

我使用了Tim Down的以下代码,但它有这个主要的警告,它不会跳过任何换行符,因此在选择范围时,也会选择这些。我需要找到一种方法来只选择文本,而不是将选择范围扩展到前一个字符。

function createRangeFromCharacterIndices(containerEl, start, end) {
    var charIndex = 0,
      range = document.createRange(),
      foundStart = false,
      stop = {};

    range.setStart(containerEl, 0);
    range.collapse(true);

    function traverseTextNodes(node) {
        if (node.nodeType == 3) {
            var nextCharIndex = charIndex + node.length;
            if (!foundStart && start >= charIndex && start <= nextCharIndex) {
                range.setStart(node, start - charIndex);
                foundStart = true;
            }
            if (foundStart && end >= charIndex && end <= nextCharIndex) {
                range.setEnd(node, end - charIndex);
                throw stop;
            }
            charIndex = nextCharIndex;
        } else {
            for (var i = 0, len = node.childNodes.length; i < len; ++i) {
                traverseTextNodes(node.childNodes[i]);
            }
        }
    }

    try {
        traverseTextNodes(containerEl);
    } catch (ex) {
        if (ex == stop) {
            return range;
        } else {
            throw ex;
        }
    }
}

0 个答案:

没有答案