javascript中选择的位置

javascript中选择的位置,javascript,html,Javascript,Html,我试图在div中查找所选文本的位置。我会提示用户在div中选择文本的子字符串,然后提交它。我需要起点和终点的索引,并且没有成功地使用下面的策略。任何帮助都将不胜感激 这是我的功能,但它不起作用: if (typeof window.getSelection != 'undefined') {

我试图在div中查找所选文本的位置。我会提示用户在div中选择文本的子字符串,然后提交它。我需要起点和终点的索引,并且没有成功地使用下面的策略。任何帮助都将不胜感激

这是我的功能,但它不起作用:

if (typeof window.getSelection != 'undefined') {                                                                                                                                                                                                                            
var sel = window.getSelection();                                                                                                                                                                                                                                          
var range = sel.getRangeAt(0);                                                                                                                                                                                                                                               
var preCaretRange = range.cloneRange();                                                                                                                                                                                                                               
startOffset = preCaretRange.toString().length;                                                                                                                                                                                                                        
endOffset = startOffset + range.toString().length;
}     

该分区称为“myarea”。谢谢

你几乎答对了
startOffset
导致它无法工作。
目前是:

var startOffset = preCaretRange.toString().length;
RHS上的值
precretange.toString().length
将返回所选字符串的总长度,而不是起始位置。要获得起始位置,您需要使用范围存储的
startOffset
属性。因此:

var startOffset = preCaretRange.startOffset;
关于优化的注意事项:您不需要将
范围
克隆到
预重传中。

document.body.addEventListener('mouseup', function () {
    if (typeof window.getSelection != 'undefined') {
        var sel = window.getSelection();
        var range = sel.getRangeAt(0);

        var startOffset = range.startOffset;
        var endOffset = startOffset + range.toString().length - 1;

        console.log("Selection starts at: " + startOffset);
        console.log("Selection ends at: " + endOffset);
    }
}, false);

下面是一个小提琴,它演示了如何使用实际的文本选择:

哪一行“不起作用”?如果条件为真,您的
条件是否为真?有任何一行抛出错误吗?您是否返回范围的数值,但它们与预期值不同(例如,
-1
0
)?可能相关且有用:这适用于起始偏移,但不适用于结束偏移。。它给出的索引比实际索引大。因此,它适用于第一个选择,但不适用于以下选择。如果您要查找包含的结束范围,则只需将
endOffset
更改为
endOffset-1
我使用多个选择对其进行了测试,结果似乎没有问题,你能详细说明一下你的测试输入吗?当然,所以我用它来选择div“myarea”中的文本,然后单击一个按钮来记录选择,然后再次选择。但是,第一次选择始终有效。。以下选择始终不正确。