Javascript 在contenteditable div中选择文本
我需要能够在给定光标位置和数字的div中选择文本。我在这里已经试过很多例子,它们都有一个问题:如果你在新行的开头,选择从上一行的最后一个字符一直到当前字符插入符号位置,如果中间有任何换行符,它们将在选择后插入文本时被清除,因此,文本将插入到前一行的末尾 我使用的代码是从Tim开始的,但它有一个主要的警告,它不会跳过任何换行符,因此在选择范围时,也会选择这些换行符。我需要找到一种只选择文本的方法,并且在前一个字符之前不扩展选择Javascript 在contenteditable div中选择文本,javascript,jquery,html,rangy,Javascript,Jquery,Html,Rangy,我需要能够在给定光标位置和数字的div中选择文本。我在这里已经试过很多例子,它们都有一个问题:如果你在新行的开头,选择从上一行的最后一个字符一直到当前字符插入符号位置,如果中间有任何换行符,它们将在选择后插入文本时被清除,因此,文本将插入到前一行的末尾 我使用的代码是从Tim开始的,但它有一个主要的警告,它不会跳过任何换行符,因此在选择范围时,也会选择这些换行符。我需要找到一种只选择文本的方法,并且在前一个字符之前不扩展选择 function createRangeFromCharacterIn
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;
}
}
}
除非我误解了代码,否则CreateRangeFromCharacteristics只是通过查看浏览器显示的文本来解释开始和结束。也就是说,如果你有foobar,那么b字母被认为是字符3。它将其转换为DOM例程想要的:b将是bar的文本节点的字符0。最好在问题中明确这一点,而不是让人们阅读代码来理解它。还有,在你的课文中,什么构成了新行?A.一个新的的开始?既然你已经标记了这个Rangy,你有没有看Rangy TextRange模块?@Louis将是一个新的行。这种情况是,在text2中,当选择text2中的第一个“t”时,它也会选择,从而删除该行break@TimDown我查看了模块,但无法使其工作,您有任何示例吗?谢谢