Как я могу сохранить выделенный выбор, используя Javascript? - PullRequest
2 голосов
/ 31 августа 2010

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

Теперь мне нужен способ постоянного выделения текста.Под постоянным я подразумеваю, когда я выделяю некоторый текст, закрываю браузер, затем заново открываю страницу с локального, текст должен оставаться выделенным.Решение Тима сохраняет текст выделенным, пока я не обновляю и не закрываю страницу.Думаю, мне нужно где-то сохранить начальное и конечное смещение диапазона, чтобы в следующий раз при повторном открытии страницы я снова мог выделить все диапазоны.

Редактировать: Извините, забыл упомянутьчто я работаю на iPhone, чтобы я мог сохранить массив выборов на локальном уровне для конкретной страницы.Любое решение для хранения диапазона для выбора, который может быть вложенным или между несколькими элементами (например, div / p / span)?

Ответы [ 4 ]

4 голосов
/ 31 августа 2010

Вам нужны две вещи: некоторые средства сериализации выбора и некоторые средства его сохранения. Файлы cookie и / или локальное хранилище подойдут для сохранения. Для сериализации / десериализации я бы предложил создать какой-то путь через DOM с использованием индекса дочернего узла на каждом уровне для определения границ выбора. См. Этот ответ на похожий вопрос: Расчет смещения выделения текста в элементах гнезда в Javascript

Редактировать: сводная информация о связанном решении

Выбор пользователя может быть выражен как Range объект. Диапазон имеет начальную и конечную границы, каждая из которых выражается в виде смещения в узле. Ответ, с которым я связан, предполагает сериализацию каждой границы как пути через DOM, представляющий узел, в сочетании со смещением. Например, для следующего документа с границами выбора, представленными |:

<html><head><title>Foo</title></head><body>On|e <b>t|wo</b><div>

... вы могли бы представить начальную границу выделения как "1/0:2", что означает смещение 2 внутри дочернего узла в позиции 0 дочернего узла в позиции 1 в корне документа. Точно так же конечная граница будет "1/1/0:1". Вы можете представить JSON целиком как '{"start":"1/0:2",end:"1/1/0:1"}'.

2 голосов
/ 06 июля 2012

Вот драгоценный вывод: MASHA (сокращение от Mark & ​​Share) - утилита JavaScript, позволяющая отмечать интересные части содержимого веб-страницы и делиться им http://mashajs.com/

Также на GitHub https://github.com/SmartTeleMax/MaSha

Работает даже в Mobile Safari и IE

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

Для сохранения данных локально можно использовать файлы cookie: http://www.w3schools.com/js/js_cookies.asp

или HTML5 localStorage: http://people.w3.org/mike/localstorage.html

Но очевидным недостатком является то, что он привязан к текущему браузеру и компьютеру. Если вы хотите что-то более настойчивое, вы должны использовать какую-то помощь на стороне сервера. Каковы ваши требования?

Полагаю, вы можете сохранить начальную и конечную позиции, а затем при загрузке страницы заново создать диапазон document.createRange, а затем методы setStart и setEnd

https://developer.mozilla.org/en/DOM/document.createRange https://developer.mozilla.org/en/DOM/range.setStart

0 голосов
/ 09 октября 2012

Rangy - это действительно хорошая библиотека кросс-браузерного выбора и выбора, написанная Тимом Дауном с тех пор, как он написал свой ответ на этот вопрос. Его модуль сериализатора оборачивает тот тип селектора, который описал Тим (например, «0/1/2: ​​34»), и добавляет пару вспомогательных функций для сохранения результата в cookie. Вы можете легко игнорировать вспомогательные функции и сохранять их в другом месте, например, в локальном хранилище или веб-службе.

В целом, это отличное решение проблемы сохранения выбора между сеансами браузера.

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