Как найти начальный и конечный позиции выделенного текста в Javascript? - PullRequest
4 голосов
/ 17 декабря 2011

Я пытаюсь найти текстовое начало и конец выделения.Итак, в следующем тексте, если я выбрал «мир! Какой штраф» из «Привет, мир! Какой это прекрасный день!», Я должен получить 7 в качестве начальной координаты и 24 в качестве конечной координаты, предполагаяиндекс на основе нуля.

Как это достижимо?

РЕДАКТИРОВАТЬ: Я ищу, чтобы найти выделение текста, который не находится внутри каких-либо элементов <input> или <textarea>.

РЕДАКТИРОВАТЬ: решил использовать решение отключено <textarea>s

Ответы [ 3 ]

2 голосов
/ 18 декабря 2011

Я использую это:

/* Returns 3 strings, the part before the selection, the part after the selection and the selected part */
function getSelected()
{
  var u     = editor.val();
  var start = editor.get(0).selectionStart;
  var end   = editor.get(0).selectionEnd;

  return [u.substring(0, start), u.substring(end), u.substring(start, end)];
}

, где редактор - $("#editor") или любой другой идентификатор вашего текстового поля / поля ввода.

Использование:

var select = getSelected()
editor.val(select[0] + '<h1>'+ select[2] + '</h1>' + select[1]);

Завернет выделенный текст в H1.Если ничего не выбрано, он просто добавит пустой H1, но вы можете добавить проверки и функциональность по своему вкусу.

** Не тестируется во всех браузерах, работает в Chrome, хотя **

2 голосов
/ 19 декабря 2011

Это возможно, но немного сложнее с contenteditable содержимым HTML (в отличие от текста внутри элемента <input> или <textarea>).Вот простая кросс-браузерная реализация:

https://stackoverflow.com/a/4812022/96100

0 голосов
/ 17 декабря 2011

Но я знаю плагин jQuery, который нацелен на вашу проблему и многое другое - https://github.com/localhost/jquery-fieldselection

...