Кроссбраузерная библиотека выбора диапазона? - PullRequest
18 голосов
/ 11 августа 2010

Кто-нибудь знает о каких-либо кросс-браузерных библиотеках выбора пользователя, написанных на JavaScript?

Я нашел несколько плагинов jQuery (которые, откровенно говоря, слишком ограниченные и очень глючные).

Я просто хотел бы знать, что вы там узнали. Не присылайте мне это снова (я потратил несколько дней, работая над всем этим). Будем надеяться, что именно здесь будущие программисты смогут найти ответ.

Ответы [ 3 ]

38 голосов
/ 11 августа 2010

Я разработал кросс-браузерную библиотеку Range и Selection под названием Rangy .Его ядро ​​по своей концепции не отличается от IERange, но выходит за его пределы с точки зрения реализации спецификаций выбора диапазона DOM уровня 2 и HTML5, а также с точки зрения стабильности и обходных путей для ошибок браузера.Я думаю, что это лучшее, что есть.

Есть также дополнительные модули для сохранения, восстановления и сериализации выборок и применения класса CSS к диапазонам и выборкам.

https://github.com/timdown/rangy

Следующее использует некоторые расширения Rangy для диапазонов, чтобы легко перебирать текстовые узлы внутри выделения и окружать каждый из них:

function surroundSelectedText(templateElement){
    var range, sel = rangy.getSelection();
    var ranges = sel.getAllRanges();
    var textNodes, textNode, el, i, len, j, jLen;
    for (i = 0, len = ranges.length; i < len; ++i) {
        range = ranges[i];
        // If one or both of the range boundaries falls in the middle
        // of a text node, the following line splits the text node at the
        // boundary
        range.splitBoundaries();

        // The first parameter below is an array of valid nodeTypes
        // (in this case, text nodes only)
        textNodes = range.getNodes([3]);

        for (j = 0, jLen = textNodes.length; j < jLen; ++j) {
            textNode = textNodes[j];
            el = templateElement.cloneNode(false);
            textNode.parentNode.insertBefore(el, textNode);
            el.appendChild(textNode);
        }
    }
}

var span = document.createElement("span");
span.style.color = "green";
span.style.fontWeight = "bold";

surroundSelectedText(span);
2 голосов
/ 11 августа 2010

Для опции плагина jQuery есть jCaret, вы можете проверить домашнюю страницу здесь и примеры здесь .

Я использовал это в нескольких проектах для различных приложений, хорошо работает для устранения кросс-браузерных несоответствий.

1 голос
/ 11 августа 2010

Для работы диапазона общего назначения (в отличие от обработки выбора ввода / текстовой области), рассмотрите ierange .Попытки реализовать стандартную модель DOM Level 2 Range, поддерживаемую другими браузерами в IE.Вид работ.

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