Получить выделенный / выделенный текст

267

Можно ли получить выделенный текст в параграфе веб-сайта, например. с помощью jQuery?

  • 2
    Вот рабочее решение dipaksblogonline.blogspot.in/2014/11/…
  • 0
    Простой JavaScript работал для меня. document.getSelection (). anchorNode.data.substr (document.getSelection (). anchorOffset, document.getSelection (). focusOffset-document.getSelection (). anchorOffset)
Показать ещё 2 комментария
Теги:
textselection

3 ответа

381

Получение текста, который пользователь выбрал, относительно прост. Нет никакой пользы от использования jQuery, поскольку вам нужны ничего, кроме объектов window и document.

function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control") {
        text = document.selection.createRange().text;
    }
    return text;
}

Если вы заинтересованы в реализации, которая также будет иметь дело с выборами в элементах <textarea> и texty <input>, вы можете использовать следующее. Поскольку в 2016 году я опускаю код, необходимый для поддержки IE <= 8, но я разместил материал для этого во многих местах на SO.

function getSelectionText() {
    var text = "";
    var activeEl = document.activeElement;
    var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
    if (
      (activeElTagName == "textarea") || (activeElTagName == "input" &&
      /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
      (typeof activeEl.selectionStart == "number")
    ) {
        text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
    } else if (window.getSelection) {
        text = window.getSelection().toString();
    }
    return text;
}

document.onmouseup = document.onkeyup = document.onselectionchange = function() {
  document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>
  • 8
    Что еще, если {} -форк хорош? что такое «контроль»?
  • 27
    @Dan: Извините, я пропустил этот вопрос (не думаю, что ТАК предупредил меня об этом). Вторая ветвь предназначена для IE <= 8 (IE 9 реализует window.getSelection() ). Проверка document.selection.type проверяет, что выделение является выделением текста, а не выбором элемента управления. В IE выделение элемента управления - это выделение внутри редактируемого элемента, содержащего один или несколько элементов (таких как изображения и элементы управления формы) с контурами и маркерами изменения размера. Если вы вызываете .createRange() для такого выбора, вы получаете ControlRange а не TextRange , а ControlRange не имеют text свойства.
Показать ещё 25 комментариев
85

Получить выделенный текст следующим образом:

window.getSelection().toString()

и, конечно, специальная обработка для:

document.selection.createRange().htmlText
  • 1
    Для IE> = 10 « поддержка document.selection была удалена в IE10 и заменена на window.getSelection ». Источник: connect.microsoft.com/IE/feedback/details/795325/…
  • 0
    Это не удастся при нескольких условиях в различных браузерах (например, Firefox).
9

Это решение работает, если вы используете хром (не можете проверить другие браузеры), и если текст находится в том же элементе DOM:

window.getSelection().anchorNode.textContent.substring(
  window.getSelection().extentOffset, 
  window.getSelection().anchorOffset)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню