kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Tim Sullivan
Tim Sullivan
Вопрос

Получение выделенного текста в браузере, кроссплатформенный

Одна из вещей, которую я хотел бы сделать в своем браузерном приложении, - это позволить пользователю выбрать некоторый текст (не в <textarea>, а просто обычный текст!), и чтобы мое приложение выводило небольшую панель инструментов, с которой можно было бы взаимодействовать (в моем случае - добавлять аннотации).

Я'нашел много материалов в google, которые, кажется, сосредоточены на написании WYSIWYG редакторов, но это'не то, что я хочу, и большинство из них работает в IE, но не в FF2 или 3. В идеале, я хотел бы получить функцию, которая может вернуть текущий выделенный текст в окне браузера, которая работает в IE7 (и 6, если возможно), FireFox 2 & 3 и Safari 2. Если она будет работать в Opera, это будет бонусом, но это не является обязательным требованием.

У кого-нибудь есть функция, которая это делает? Или идея, с чего начать?

12 2008-08-13T23:32:09+00:00 6
 tshepang
tshepang
Редактировал вопрос 4-го апреля 2014 в 8:47
Программирование
javascript
browser
Greg Borenstein
Greg Borenstein
4-го октября 2008 в 6:41
2008-10-04T06:41:01+00:00
Дополнительно
Источник
Редактировать
#8414417

Это jQuery плагин, но он выполняет очень конкретную задачу: обернуть текст, который вы выделите с помощью тегов. Это может быть просто то, что вы хотите. Но если вы Don'т хотим, чтобы (или в ситуации, когда вы можете'т) дополнить посторонних разметки на свою страницу, вы можете попробовать следующие решения:

function getSelectedText() {
  var txt = '';

  if (window.getSelection) {
    txt = window.getSelection();
  }
  else if (document.getSelection) {
    txt = document.getSelection();
  }
  else if (document.selection) {
    txt = document.selection.createRange().text;
  }
  else return; 

  return txt;
}

Эта функция возвращает объект, представляющий выделение текста. Он работает в разных браузерах (хотя я подозреваю, что объекты его отдача будет немного отличаться в зависимости от браузера и только надежны в текст результата, а не для каких-либо дополнительных свойств).

Примечание: изначально я обнаружил, что фрагмент кода здесь: http://www.codetoad.com/javascript_get_selected_text.asp

Markus Safar
Markus Safar
Редактировал ответ 7-го февраля 2016 в 6:25
16
0
Решение / Ответ
 palehorse
palehorse
13-го августа 2008 в 11:52
2008-08-13T23:52:35+00:00
Дополнительно
Источник
Редактировать
#8414413

Посмотрите на jQuery и плагин wrapSelection. Возможно, это то, что вы ищете.

8
0
Walter Rumsby
Walter Rumsby
17-го августа 2008 в 8:21
2008-08-17T20:21:46+00:00
Дополнительно
Источник
Редактировать
#8414414

Введение в Range содержит некоторые подробности о том, как различные браузеры предоставляют вам доступ к выделению текста.

Мой опыт показывает, что работать с этими различными API напрямую довольно неуклюже, так что если wrapSelection работает для вас, я бы выбрал его.

1
0
 YakovL
YakovL
4-го января 2019 в 12:38
2019-01-04T12:38:59+00:00
Дополнительно
Источник
Редактировать
#8414418

В эти дни этот метод должен быть достаточно]1:

function getSelectedText() {
    return window.getSelection ? window.getSelection().toString() : '';
}

Он вернется&#39;&#39; в редких случаях, в очень старых браузерах и может быть в случае опера мини (которые должны быть испытаны, хотя это может быть устаревшая) + см. Примечание для UC браузер для Android.

 YakovL
YakovL
Редактировал ответ 4-го января 2019 в 1:02
0
0
 eplawless
eplawless
17-го августа 2008 в 8:25
2008-08-17T20:25:28+00:00
Дополнительно
Источник
Редактировать
#8414415

Поведение отдельных браузеров в отношении выбора описано здесь.

-1
0
 Polsonby
Polsonby
17-го августа 2008 в 8:35
2008-08-17T20:35:22+00:00
Дополнительно
Источник
Редактировать
#8414416

Этот код работает в браузере Safari, IE и Firefox - надеюсь, что это'ы помочь

var str = (window.getSelection) ? window.getSelection() : document.selection.createRange();
str = str.text || str;
str = str + ''; // the best way to make object a string...
Tim Sullivan
Tim Sullivan
Редактировал ответ 7-го февраля 2015 в 7:38
-3
0
Похожие сообщества 12
JavaScript Jobs — чат
JavaScript Jobs — чат
26 291 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 470 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 810 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 721 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
javascript_ru
javascript_ru
2 726 пользователей
Сообщество любителей самого популярного языка программирования в мире. Публикация вакансий: @javascript_jobs Чаты: @frontend_ru @css_ru Каналы: @defront @frontendnoteschannel Флуд: @javascript_ru_flood Важно! http://nometa.xyz и http://neprivet.ru
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией