我这里有这个代码:
if (!window.TextSelect) {
TextSelect = {};
}
TextSelect.Selector = {};
TextSelect.Selector.getSelected = function () {
var t = '';
if (window.getSelection) {
t = window.getSelection();
} else if (document.getSelection) {
t = document.getSelection();
} else if (document.selection) {
t = document.selection.createRange().text;
}
return t;
}
TextSelect.Selector.mouseup = function () {
var st = TextSelect.Selector.getSelected();
if (st != '') {
$("#paragraphs div").removeClass("selected");
goodoldst = st.toString();
quoteExist = '';
for (i = 0; i < assocs.length; i++) {
if (st.toString().indexOf(assocs[i]) >= 0) {
quoteExist = quoteExist + '1';
} else {
quoteExist = quoteExist + '0';
}
}
console.log(quoteExist)
if (quoteExist.indexOf('1') >= 0) {
alert('ALREADY IN DATABASE!!!')
} else {
newst = '<div class="selected">' + st + '</div>';
newvalue = paraval.replace(st, newst);
$('#paragraphs').html(newvalue);
if (newst != '' && $('.explanation').css('display') == 'none') {
$('.explanation').toggle();
}
$('#newDescr').html(' SELECTED TEXT FORM <textarea id="thedescr" ></textarea><br><button onClick="sendNewDescr()">SUBMIT!</button>');
if ($("#annotation").css("display") == "block") {
$("#annotation").toggle();
}
makeitglob(goodoldst);
$.post('ajax.php?q=a', {
newstajax: newst
}).done(function (data) {
//$('.explanation').html(data);
});
}
}
}
问题在于,如果我选择一些文本,如果我之前有这个特定的选择,它会选择该选择的第一次出现,而不是我选择的。最大的问题是当我选择一个字母时(让我们说“D”)。不是从段落中选择字母D,而是从标签DIV中选择D。我想得到精确的选择,而不是第一次出现。感谢
http://jsfiddle.net/zq1dqu3o/试试这个。它也是同样的问题。如果我选择最后一个“文本”,则单击高亮显示,最后一个被选中。我希望我选择的那个获得高分,即使它是中间的最后一个或一个。通过文字我的意思是“文字”这个词
我要做的是拥有像“天才”(http://screen.genius.com/Steven-kloves-harry-potter-and-the-sorcerers-stone-how-to-bottle-fame-annotated)
这样的系统我想在数据库中找到与段落中的文本相关的解释....
任何??
答案 0 :(得分:1)
Range
返回的getRangeAt()
对象包含startOffset
和endOffset
,它们是您在字符串中所选内容的开始/结束索引。
请参阅此小提琴,了解使用偏移量的示例:http://jsfiddle.net/zq1dqu3o/8/