Учитывая следующую произвольную строку:
«Это первая страница, это вторая страница, это вторая страница, а это третья страница».
Я выделяю (перетаскиваю курсор по тексту и выбираю) случайную подстроку; в этом примере я выделяю второе вхождение термина "вторая страница".
Я получаю этот выделенный текст, используя:
var text = window.getSelection().toString();
Теперь мне нужно определить начальный и конечный индекс выделенного термина в тексте.
Строка и выделенный термин являются произвольными - шаблон для выбора отсутствует.
Второе вхождение (выделенный текст). Не был уверен, должен ли я добавить это в пример - сделаю это сейчас.
Как выделено слово? Есть ли в строке html-теги? Вы действительно просто спрашиваете, как найти слово в строке, заключенной в тег?
Почему второй? Есть ли шаблон?
Шаблона нет, это просто текст, который я случайно выбрал для выделения. Например, я мог бы выделить третье вхождение слова "and"
Чтобы получить хороший ответ, вам нужно будет описать, как слово выделено? Если это html-теги, в stackoverflow уже есть много хороших ответов. Посмотрите на stackoverflow.com/questions/2818547/… и johnresig.com/blog/pure-javascript-html-parser
Выделено с точки зрения выделения текста мышкой.
Мне потребовалось некоторое время, чтобы понять, что слово выделенный на самом деле является выделенный в данном вводе. Судя по ответам я не один такой...
Если вы посмотрите на tge dupe, вы найдете activeEl.selectionStart и selectionEnd
Спасибо @JonasWilms - хотя я стремлюсь сделать это без использования текстовой области.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это даст вам начальный и конечный индекс выделенного курсором текста.
//To get start index
window.getSelection().anchorOffset
// To get end index
window.getSelection().focusOffset
Пожалуйста, смотрите обновленный пример. Ему нужно получить индекс выделенного текста в произвольной строке. Это не всегда будет первым или последним случаем.
Это было сделано до редактирования. Сейчас код изменен. Дайте мне знать, если это то, что нужно.
Та же проблема, что и в приведенных выше ответах, к сожалению, мы не будем знать, какова позиция выбранного слова (оно может быть первым или сотым), но мы хотим получить только индексы выбранного слова, а не все из них.
Пожалуйста, проверьте, это ли то, что вы ожидаете.
Это не индекс, а только длина слова, насколько я могу судить.
"This is page one, This is page two, and this is page two, and this is page three." Если выбран второй page курсором, какой ответ вы ожидаете?
startIndex = 26, endIndex = 29 Метод .selectionStart и .selectionEnd, упомянутый в комментариях выше, работает, но я пытаюсь найти обходной путь без использования текстовой области.
А если бы ваш текст был
"This is page one, and this is page two, and this is page three."- каким был бы ваш ожидаемый результат?