可变选择EXACT - Javascript / Ajax

时间:2014-08-22 16:23:07

标签: javascript jquery ajax

我这里有这个代码:

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

这样的系统

我想在数据库中找到与段落中的文本相关的解释....

任何??

1 个答案:

答案 0 :(得分:1)

Range返回的getRangeAt()对象包含startOffsetendOffset,它们是您在字符串中所选内容的开始/结束索引。

请参阅此小提琴,了解使用偏移量的示例:http://jsfiddle.net/zq1dqu3o/8/