построение XPath выражения
Вообщем задача такая что нужно построить XPath выражение к конкретному елементу на html странице например по событию onClick. Может быть кто нибуть сталкивался с такой задачей? Я так подозреваю возможно есть уже готовые решения в каких нибуть javascript фреймвёрках? Заранее спасибо.
|
не совсем ясна формулировка задачи, и конечная цель применения.
уточните если я неправильно понял [telepatmode] вы хотите, чтобы по клику на элементе у вас в кукую-нибудь переменную выводился XPath-путь до этого элемента. Необходимо уточнение, что до любого элемента есть БЕСКОНЕЧНОЕ множество XPath-путей.Из них достаточно большое количество приемлимой длины.а оптимальных из них еденицы(и то смотря что понимать под оптимальностью) Приведу вариант для построения самого простого "неумного" XPath-пути function get_xpath(node) { var num,sibling; if(node.parentNode != undefined) { sibling=node.parentNode.getElementsByTagName(node.tagName); for(num=0;num<sibling.length;num++) if(node==sibling[num]) break; return get_xpath(node.parentNode)+"/"+node.tagName+"["+(num+1)+"]"; } else return "/"; } вроде бы все правильно написал, попробуйте. вот HTML_ка для теста <html> <head> <title>Выберите</title> </head> <body> <span onclick="alert(get_xpath(this))">asdsad</span> </body> </html> [/telepatmode] |
Благодарю за ответ! Вы поняли все правильно, а по поводу XPath путей то уточняю что желательнее всего конечно построить более относительный путь к елементу а не самый простой от начала документа до самого елемента! Просто я думал что возможно такая штука уже может быть реализована в каких нибуть javascript фреймверках и там уже более продуманный алгоритм построения XPath выражения. Можно конечно использовать и такую функцию но хотелось бы генерировать такое выражение что бы даже если документ был модифицирован то XPath выражение оставалось правильным, например когда у нас по дороге к нашему елементу вставили еще одну таблицу и в итоге внутри XPath выражения у нас это будет уже не table[2] а table[3].
|
endryha,
Я предположу что такого алгоритма не существует в принципе. |
Цитата:
ИМХО, для всех случаев такой алгоритм организовать правктически невозможно. единственный способ-делать XPath-ы своей головой. есть конечно идеи по организации такого алгоритма но для качественной реализации этого алгоритма нужен во первых какой-нибудь механизм обработки XPath(что в принципе реализовано уже),и очень качествнный программинг. в общем виде это будет выглядеть примерно так: пытаемся перебрать все возможные комбинации, минимизирующих элементы привязки.если не удалось найти адекватного выражения(чтобы количество элементов было равно 1), пытаемся увеличть количество элементов привязки. трудно, долго, но в первом приближении возможно но вопрос, в том, какое из полученных выражений считать "хорошим".тут уже нужен человеческий анализ за программу с реализованной второй частью, я бы не против и выложить деньги.но, такая программа практически невозможна да и первая часть реализуется долго, трудно и ненаверняка.ее можно дорабатывать до бесконечности, получая незначительный выигрыш для дополнительного круга задач на XPath |
В принципе я с вами согласен! Спасибо за советы.
|
Часовой пояс GMT +3, время: 00:45. |