Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получение родительского узла выделенного текста (https://javascript.ru/forum/dom-window/41556-poluchenie-roditelskogo-uzla-vydelennogo-teksta.html)

null28 19.09.2013 05:05

Получение родительского узла выделенного текста
 
Получаю текст следующим образом:
function getSelectionText() {
  var txt = '';
  if (txt = window.getSelection){
    txt = window.getSelection().toString();
  } else { 
    txt = document.selection.createRange().text;
  }
  return txt;
}
...
var tx = getSelectionText();


Как-то можно получить родительский узел выделенного текста?

т.е. текст содержится в такой форме:
<div class="postbody" style="padding: 4px;">какой-то текст</div>
и я хочу как-то перейти к div

Deff 19.09.2013 06:27

Цитата:

Сообщение от null28
Как-то можно получить родительский узел выделенного текста?

Суть то в том, что можно выделить текст в двух-трех и более соседних узлах, типичное решение - 1. отслеживают onmousedown на body c делегированием события на ближайший родительский элемент, затем регуляркой по тексту уточняют затронутые выделением элементы,
либо ищут ближайшего родителя, включающего полный текст выделенного

null28 19.09.2013 07:29

У меня в принципе единовременно выделяемый текст в одном узле находится...

Цитата:

либо ищут ближайшего родителя, включающего полный текст выделенного
вот это как сделать? не очень понял... всё равно нужно вещать обработчик клика на body?

danik.js 19.09.2013 07:38

getSelection().focusNode.parentNode

А с document.selection хз как

null28 19.09.2013 09:42

спс, focusNode действительно помог

Яростный Меч 19.09.2013 15:40

Для getSelection():
var sel = window.getSelection();
var rang = sel.getRangeAt(0);
var parent = rang.commonAncestorContainer;


Для IE (document.selection):
var rang = document.selection.createRange();
var parent = rang.parentElement();


в обоих случаях предполагается, что выделение есть. это надо проверить отдельно.


Часовой пояс GMT +3, время: 19:55.