Javascript文本范围至插入符号位置

Javascript文本范围至插入符号位置,javascript,html,contenteditable,caret,textrange,Javascript,Html,Contenteditable,Caret,Textrange,我正在使用IE 8,我想在contenteditable div中创建一个文本范围,该范围应包括插入符号位置之前的所有文本(我在editableDiv中知道)。到目前为止,我能够选择div中的所有文本: function myFunction(editableDiv, cursorPosition) { if (document.selection) { var range = document.body.createTextRange(); range

我正在使用IE 8,我想在contenteditable div中创建一个文本范围,该范围应包括插入符号位置之前的所有文本(我在editableDiv中知道)。到目前为止,我能够选择div中的所有文本:

 function myFunction(editableDiv, cursorPosition)
 {
    if (document.selection) {
       var range = document.body.createTextRange();
        range.moveToElementText(editableDiv);            
        range.collapse(false);
        range.select();
    }
 }

<div id="myDiv" runat="server" contenteditable="true">
函数myFunction(可编辑的div、游标位置)
{
if(文档选择){
var range=document.body.createTextRange();
range.moveToElementText(editableDiv);
范围。塌陷(假);
range.select();
}
}
但是如何创建一个从div中的第一个字符开始并一直持续到插入符号位置的文本范围呢?非常感谢。

使用
TextRange
setEndPoint()
方法:

var caretRange = document.selection.createRange();
var preCaretRange = document.body.createTextRange();
preCaretRange.moveToElementText(editableDiv);
preCaretRange.setEndPoint("EndToStart", caretRange);

显然,对于非IE浏览器,您需要不同的代码。

在editableDiv中除了文本节点之外,还有其他节点吗?跨距、字体大小标签等?如果没有,您可以使用选择对象中第一个范围的endOffset属性。插入符号位置是如何表示的?cursorPosition是一个整数,用于跟踪在插入符号之前找到的字符数(它不考虑html元素,而只考虑div中插入符号之前的innerText长度)。@Asad Yes,我在editableDiv.var caretRange=document.selection.createRange()中有跨距;这是否应该创建一个从光标位置开始的文本范围?或者如何使用光标位置?谢谢我明白你的意思,但我的问题是在调用函数时,editableDiv中没有放置光标,事实上,我需要它将插入符号放置在我在editableDiv中添加的跨度之后。我的版本总是将插入符号放在末尾,但我需要一些东西将插入符号放在插入的跨距之后,这可以放在任何地方。@Crista23:如果希望范围在跨距之后结束,可以使用不同的组合
moveToElementText()
setEndPoint()
。谢谢您的回答!我这样做了,没有收到任何错误,但是似乎我的跨度是在内容可编辑div中被选中的,并且是集中的。此外,插入符号不会出现在div中,就像在中一样。我能做些什么来防止这种情况发生?事实上,我用1个字符移动了范围的结尾,解决了这个问题。非常感谢,你的回答对我帮助很大!我还发现了你的另一个帖子,非常有用!谢谢!