Рассчитать положение выделенного текста javascript / JQuery? - PullRequest
3 голосов
/ 03 ноября 2011

Как получить положение выделенного текста путем вычисления его смещения сразу после тега body?

Например, рассмотрим следующий HTML,

<body> <div>hi</div> <div>dude!</div> </body>

при выборе из "i" (вПривет) для "du" (в чувак), мне нужно получить 2 в качестве начальной позиции и 4 в качестве конечной позиции.

Примечание: игнорировать элементы тега.

Javascript предпочтительнее!

Ответы [ 2 ]

14 голосов
/ 03 ноября 2011

Вот некоторый простой, наивный код для этого, который вполне может выполнить вашу задачу.Он не учитывает текст, который может быть сделан невидимым (например, CSS или находящимся внутри элемента или, например) и может иметь расхождения в браузере (т.е. IE по сравнению со всем остальным) с переносами строк, и не учитывает сжатые пробелы.(например, 2 или более последовательных пробела, свернутых в одно видимое пространство на странице).Тем не менее, он работает для вашего примера во всех основных браузерах.

Демонстрационная версия: http://jsfiddle.net/UuDpL/2/

Код:

function getSelectionCharOffsetsWithin(element) {
    var start = 0, end = 0;
    var sel, range, priorRange;
    if (typeof window.getSelection != "undefined") {
        range = window.getSelection().getRangeAt(0);
        priorRange = range.cloneRange();
        priorRange.selectNodeContents(element);
        priorRange.setEnd(range.startContainer, range.startOffset);
        start = priorRange.toString().length;
        end = start + range.toString().length;
    } else if (typeof document.selection != "undefined" &&
            (sel = document.selection).type != "Control") {
        range = sel.createRange();
        priorRange = document.body.createTextRange();
        priorRange.moveToElementText(element);
        priorRange.setEndPoint("EndToStart", range);
        start = priorRange.text.length;
        end = start + range.text.length;
    }
    return {
        start: start,
        end: end
    };
}

alert( getSelectionCharOffsetsWithin(document.body).start );
3 голосов
/ 03 апреля 2012

Используйте следующую функцию java-скрипта для выделения html-страницы ..

function stylizeHighlightedString() 
{
    var range               = window.getSelection().getRangeAt(0);
    var selectionContents   = range.extractContents();
    var span                = document.createElement("span");
    span.appendChild(selectionContents);
    span.setAttribute("class","uiWebviewHighlight");

    span.style.backgroundColor  = "red";
    span.style.color            = "white";

    range.insertNode(span);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...