координаты TEXT_NODE
Мне надо сделать так чтобы функция elementFromPoint выдавала не только тот узел который ELEMENT_NODE, но и TEXT_NODE.
Мне в голову приходила мысль превращать TEXT_NODE в ELEMENT_NODE например с помощью wrap, но эта функция делается с помощью jquery и я не знаю как её применить к одному конкретному, выбранному узлу. или может быть можно как-то определить координаты TEXT_NODE или ещё какой нибудь способ есть? |
Для начала: зачем вообще используется именно elementFromPoint?
С помощью событий мыши например можно получить не только текстноду, но даже позицию в оной. |
Мне бы как нибудь без установки событий мыши.
|
elementFromPoint очевидно получает элемент. Вообще этот метод оправдан в единичных случаях, и я сомневаюсь ваш именно такой. Тем не менее elementFromPoint возвращает самый последний в иерархии элемент, потому соответствующую текстноду получить проблем никаких нет, просто взять firstChild:
var textNode = document.elementFromPoint(x, y).firstChild; //если первый элемент не текстнода, значит точка где-то далеко от текста, возвращаем null. if(textNode && textNode.nodeType !== 3) textNode = null; //тут можно добавить для надёжности функцию, что до определённого предела будет двигать точку вверх-вниз, пока не найдёт таки текстКакие-то проблемы требующие извращений могут возникнуть если текстноды добавлялись скриптом через createTextNode(), т.е. в одном элементе несколько текстнод подряд. Впрочем тоже решаемо: если все добавленные тексноды можно считать как одну, то поможет применение elem.normalize(), иначе если каждая подобная нода важна(сооовсем уж извращённый вариант) то можно понаркоманить с помощью Range и getClientRects(). |
Цитата:
Я нашёл как с помощью wrap сделать все текстовые ноды обычными, но не знаю как трансформировать только одну ноду, а не все. $("*").contents().filter(function(){ return this.nodeType === 3; }).wrap('<teg>'); |
Это бред. Да и что значит "только одну"? Если вы эту одну нашли - накой её оборачивать, а если не нашли - как вы собираетесь оборачивать то, что неизвестно?
И да - сложно. А что вы хотели? Удаление гланд через жопу и не может быть лёгкой операцией. |
Я собираюсь обернуть childNodes которые являются текстовыми нодами выбранного элемента и применить elementFromPoint повторно в ту же точку. Есть способ обернуть элементы по одному?
|
Мне бы сделать чтобы хоть как-то работало, а потом возможно сделаю лучше.
|
Цитата:
|
Потому что в моём случае нельзя редактировать html код страницы, можно только добавить Javascript как дополнение
|
Часовой пояс GMT +3, время: 04:51. |