Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取高亮显示文本的div中的位置_Javascript_Jquery - Fatal编程技术网

Javascript 获取高亮显示文本的div中的位置

Javascript 获取高亮显示文本的div中的位置,javascript,jquery,Javascript,Jquery,我想知道突出显示的文本(包括HTML)的起始和结束位置(字符数) 例如: <div class="container"> <div id="test"> Hello world, how <a href="#">are</a> you doing? </div> </div> 当我选择:您如何时,输出将是:start=30和stop=57 注意:因此它从容器中开始计数 更新: 当我使用:wi

我想知道突出显示的文本(包括HTML)的起始和结束位置(字符数)

例如:

<div class="container">    
<div id="test">
        Hello world, how <a href="#">are</a> you doing?
    </div>
</div>
当我选择:
您如何
时,输出将是:
start=30
stop=57

注意:因此它从
容器中开始计数

更新: 当我使用:
window.getSelection().getRangeAt(0).startOffset
时,它会给我startOffset,但在当前元素中,我希望它来自父元素。
因此,在我的示例中,如果我选择了“world”,它将输出6,但我还需要
,因此输出需要为:21

尝试以下操作:

function startStop(word){
    var start = $.trim($('#test')[0].innerHTML).indexOf(word);
    var stop = start + word.length;
    return {
        start: start,
        stop: stop
    }
}
修剪将确保删除所有空白等。然后,我们只需检查内部html中给定单词的索引就可以知道开始。结束等于开始+给定单词的长度

请注意,它将返回29,而不是30,因为它以0开头

这里可以看到一个小测试用例:


如果希望包含选定的div,可以使用outerHTML而不是innerHTML(cfr)

请注意,您必须确保您的html结构良好,在div中的句子前没有空格。因为这样,它也会计算这些空格


如果您真的想使用“脏”html,另一种选择是:

$.trim($('#test')[0].outerHTML).indexOf('>') + $.trim($('#test')[0].innerHTML).indexOf('world') + 1

这将首先计算第一个标记本身的长度,并添加内部文本的长度,而不考虑任何空格。。。(cfr.

我不完全确定您试图归档的内容,但如果您想计算div标记中的字符数,可能这会有所帮助:

“开始和结束位置”-您是指字符数吗?还是高度/宽度位置?这有点让人困惑,它会给你像素坐标。但是,如果你想要字符的位置,你可能想要@KyleR,我的意思是“字符数”,你想计算空白吗?在您的示例中,HTML标记“everything”不会返回30/29一切都会回来的。。。因为有一些前导空格等,所以你的例子是错误的,我现在能想到的所有可能性都被更新了
$.trim($('#test')[0].outerHTML).indexOf(word);
$.trim($('#test')[0].outerHTML).indexOf('>') + $.trim($('#test')[0].innerHTML).indexOf('world') + 1