Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2015, 01:13
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

координаты TEXT_NODE
Мне надо сделать так чтобы функция elementFromPoint выдавала не только тот узел который ELEMENT_NODE, но и TEXT_NODE.
Мне в голову приходила мысль превращать TEXT_NODE в ELEMENT_NODE например с помощью wrap, но эта функция делается с помощью jquery и я не знаю как её применить к одному конкретному, выбранному узлу. или может быть можно как-то определить координаты TEXT_NODE или ещё какой нибудь способ есть?
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2015, 01:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,960

Для начала: зачем вообще используется именно elementFromPoint?
С помощью событий мыши например можно получить не только текстноду, но даже позицию в оной.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2015, 13:01
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

Мне бы как нибудь без установки событий мыши.

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

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 в 14:58.
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2015, 16:44
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

Сообщение от Aetae Посмотреть сообщение
если каждая подобная нода важна(сооовсем уж извращённый вариант) то можно понаркоманить с помощью Range и getClientRects().
У меня как раз такой извращённый вариант. Range и getClientRects() это сложно. Может быть всё таки можно как-то сделать из текстовой ноды обычную?
Я нашёл как с помощью wrap сделать все текстовые ноды обычными, но не знаю как трансформировать только одну ноду, а не все.
$("*").contents().filter(function(){
     return this.nodeType === 3;
  }).wrap('<teg>');
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2015, 17:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,960

Это бред. Да и что значит "только одну"? Если вы эту одну нашли - накой её оборачивать, а если не нашли - как вы собираетесь оборачивать то, что неизвестно?

И да - сложно. А что вы хотели? Удаление гланд через жопу и не может быть лёгкой операцией.
__________________
29375, 35

Последний раз редактировалось Aetae, 21.02.2015 в 17:08.
Ответить с цитированием
  #7 (permalink)  
Старый 21.02.2015, 21:49
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

Я собираюсь обернуть childNodes которые являются текстовыми нодами выбранного элемента и применить elementFromPoint повторно в ту же точку. Есть способ обернуть элементы по одному?
Ответить с цитированием
  #8 (permalink)  
Старый 21.02.2015, 22:16
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

Мне бы сделать чтобы хоть как-то работало, а потом возможно сделаю лучше.
Ответить с цитированием
  #9 (permalink)  
Старый 21.02.2015, 22:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,029

Сообщение от милт
Мне бы как нибудь без установки событий мыши
почему?
Ответить с цитированием
  #10 (permalink)  
Старый 22.02.2015, 01:27
Аспирант
Отправить личное сообщение для милт Посмотреть профиль Найти все сообщения от милт
 
Регистрация: 28.06.2014
Сообщений: 54

Потому что в моём случае нельзя редактировать html код страницы, можно только добавить Javascript как дополнение
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать координаты для draggable-элемента, добавленного с помощью jquery UI begin jQuery 5 16.05.2014 19:14
range, selection координаты zebra Общие вопросы Javascript 2 15.04.2014 23:23
Координаты выделенного слова или координаты после двойного нажатие на слово olexand777 Events/DOM/Window 10 26.03.2013 09:37
Координаты выделенного слова или координаты после двойного нажатие на слово olexand777 jQuery 1 25.03.2013 15:36
Координаты картинки после движения Lisenok Общие вопросы Javascript 10 30.10.2009 18:58