如何确定当前所选文本的顺序发生?

时间:2016-05-04 16:36:09

标签: javascript jquery css

我想知道在我的内容div(.entry-content)中选择了当前所选文本的哪一个。

我之前的答案建立的当前小提琴是正确的......有时候!

http://jsfiddle.net/FTWLJ/10/

如果您选择单词 Maecenas (第一个单词),则在您选择第一个单词时会给出正确的结果。尝试使用第二段中的第一段,它会出错。它应该是3。

它似乎有时工作但不可靠,也许是使用 elementFromPoint(x,y)

看来,当您选择完整的单词时,它不起作用。当你选择半个单词和另一个单词时,它就可以了。

$('.entry-content').on('click',function(e){

    //get the x and y coords
    var offset = $(this).offset(),
        x = e.clientX - offset.left,
        y = e.clientY - offset.top,
        text;

    //get the highlighted 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;
    }

    //check if the text is empty or just spaces   
    if($.trim(text).length){

        //wrap each word similar to the highlighted text with <span>
        var regex = new RegExp(text,'g')
        $('.entry-content').html($('.entry-content').html().replace(regex, '<span class="highlight">'+text+'</span>'));

        //get the new span index situating on coords
        var el = document.elementFromPoint(x, y),
            occurrence = $(el).index()+1,
            exist = $('span').length;       

        alert(exist+' exist | occurrence: '+occurrence);

        //remove the <span> wrapper            
        $('span').contents().unwrap();

    }
});

有人为此提供可靠的解决方案吗?

1 个答案:

答案 0 :(得分:2)

这将返回与其父元素相关的元素索引:

occurrence = $(el).index()+1

您想要的是与所有跨度相关的索引:

occurrence = $('span').index(el)+1

Fiddle