Показать сообщение отдельно
  #4 (permalink)  
Старый 21.02.2015, 15:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

elementFromPoint очевидно получает элемент. Вообще этот метод оправдан в единичных случаях, и я сомневаюсь ваш именно такой. Тем не менее elementFromPoint возвращает самый последний в иерархии элемент, потому соответствующую текстноду получить проблем никаких нет, просто взять firstChild:
var textNode = document.elementFromPoint(x, y).firstChild;

//если первый элемент не текстнода, значит точка где-то далеко от текста, возвращаем null.
if(textNode && textNode.nodeType !== 3) textNode = null;
//тут можно добавить для надёжности функцию, что до определённого предела будет двигать точку вверх-вниз, пока не найдёт таки текст
Какие-то проблемы требующие извращений могут возникнуть если текстноды добавлялись скриптом через createTextNode(), т.е. в одном элементе несколько текстнод подряд. Впрочем тоже решаемо: если все добавленные тексноды можно считать как одну, то поможет применение elem.normalize(), иначе если каждая подобная нода важна(сооовсем уж извращённый вариант) то можно понаркоманить с помощью Range и getClientRects().
__________________
29375, 35

Последний раз редактировалось Aetae, 21.02.2015 в 15:58.
Ответить с цитированием