javascript中所选内容的位置

Position of selection in javascript

本文关键字:位置 javascript      更新时间:2023-09-26

我正在尝试查找所选文本在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;
}     

div被称为"myarea"。感谢

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

var startOffset = preCaretRange.toString().length;

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

var startOffset = preCaretRange.startOffset;

关于优化的注意事项:您不需要将range克隆到preCaretRange.中。

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);

下面是一把小提琴,展示了它在实际文本选择中的工作:http://jsfiddle.net/Dp3qp/3/