Одна из вещей, которую я хотел бы сделать в своем браузерном приложении, - это позволить пользователю выбрать некоторый текст (не в <textarea>, а просто обычный текст!), и чтобы мое приложение выводило небольшую панель инструментов, с которой можно было бы взаимодействовать (в моем случае - добавлять аннотации).
Я'нашел много материалов в google, которые, кажется, сосредоточены на написании WYSIWYG редакторов, но это'не то, что я хочу, и большинство из них работает в IE, но не в FF2 или 3. В идеале, я хотел бы получить функцию, которая может вернуть текущий выделенный текст в окне браузера, которая работает в IE7 (и 6, если возможно), FireFox 2 & 3 и Safari 2. Если она будет работать в Opera, это будет бонусом, но это не является обязательным требованием.
У кого-нибудь есть функция, которая это делает? Или идея, с чего начать?
Это 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
Введение в Range содержит некоторые подробности о том, как различные браузеры предоставляют вам доступ к выделению текста.
Мой опыт показывает, что работать с этими различными API напрямую довольно неуклюже, так что если wrapSelection работает для вас, я бы выбрал его.
В эти дни этот метод должен быть достаточно]1:
function getSelectedText() {
return window.getSelection ? window.getSelection().toString() : '';
}
Он вернется''
в редких случаях, в очень старых браузерах и может быть в случае опера мини (которые должны быть испытаны, хотя это может быть устаревшая) + см. Примечание для UC браузер для Android.
Этот код работает в браузере 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...