Кто-нибудь знает какие-либо библиотеки диапазонов выбора пользователей для разных браузеров, написанные на javascript?
Я нашел несколько плагинов jQuery, (которые, откровенно говоря, слишком ограничены и содержат много ошибок.)
Я просто хотел бы знать, что вы там обнаружили. Не присылайте мне снова гуглить (я целыми днями работал над всем этим). Надеюсь, именно здесь будущие программисты смогут найти ответ.
Я разработал кроссбраузерную библиотеку диапазонов и выбора под названием Rangy . Его ядро не отличается по концепции от IERange, но выходит за его пределы с точки зрения реализации DOM level 2 Range и спецификаций выбора 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);
Для работы с диапазоном общего назначения (в отличие от обработки выбора ввода / текстового поля) рассмотрите вариант ierange . Попытки реализовать в IE стандартную модель DOM Level 2 Range, поддерживаемую другими браузерами. Вид работ.
Для опции плагина jQuery есть jCaret, вы можете проверить домашнюю страницу здесь и примеры здесь .
Я использовал это в нескольких проектах для различных приложений, хорошо работает при устранении несоответствий между браузерами.