如何知道所选/突出显示的文本jquery的顺序发生

时间:2013-12-05 03:41:49

标签: javascript jquery highlight highlighting

我正在测试一个小型演示

例如,我有像这样的标签中的文字

<body>

good morning, good morning

abcdef ajska
good morning
ssssss
<body>

例如,当我选择(突出显示)第二个“早上好”时, 我怎么知道,这是本文的第二个出现?

如果我选择“abcdef ajska”, 我怎么知道这是第一次出现在这个文本中?

所以当我选择一个段落时, 我如何知道这个paraghaph的顺序?

这是一个关于选择的演示,

https://medium.com/what-i-learned-today/2c5ec46b86d0

但我只想要某人 使用鼠标选择一个段落,将显示类似警告框的promt 并让我知道选定的paraghaph的顺序是什么?

非常感谢你。 感谢

1 个答案:

答案 0 :(得分:1)

我想我明白你想要实现的目标,我有一个想法,虽然它不是很可靠,但也许这可以给你一个良好的开端。

获取突出显示的文本,找到正文中的所有相似文本,并用<span>包装。然后获取<span>索引以确定突出显示的文本的出现次数。

我们可以通过获取鼠标click事件坐标来获取该发生值。然后找到位于该坐标上的<span>并检索其索引。

我们通过以下方式获得突出显示的文字:

var text;
if(window.getSelection){
    text = window.getSelection().toString();
}else if (document.selection && document.selection.type != 'Control'){
    //for IE prior to 9
    text = document.selection.createRange().text;
}

然后检查文本是否为空或不是空格,并用span:

包装所有相似的文本
if($.trim(text).length){
    //wrap each word similar to the highlighted text with <span>
    var regex = new RegExp(text,'g')
    $('body').html($('body').html().replace(regex, '<span>'+text+'</span>'));
}

现在它全部被包裹,我们需要获得原始点击坐标:

$('body').on('click',function(e){
//get the x and y coords
var offset = $(this).offset(),
    x = e.clientX - offset.left,
    y = e.clientY - offset.top,
})

获取位于该坐标上的新范围:

var el = document.elementFromPoint(x, y)

以下是jsfiddle