我想知道在我的内容div(.entry-content)中选择了当前所选文本的哪一个。
我之前的答案建立的当前小提琴是正确的......有时候!
如果您选择单词 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();
}
});
有人为此提供可靠的解决方案吗?
答案 0 :(得分:2)
这将返回与其父元素相关的元素索引:
occurrence = $(el).index()+1
您想要的是与所有跨度相关的索引:
occurrence = $('span').index(el)+1