我需要能够在给定光标位置和数字的情况下选择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;
}
}
}