нужна библиотека javascript или jquery для преобразования xpath в выбираемый формат CSS3 в jquery - PullRequest
0 голосов
/ 31 октября 2009

как я могу конвертировать xpath как

/html/body/div[3]/ul/li[1]/a[5]

html > body > div[3] > ul > li[1] > a[5]

Я считаю, что индекс не поддерживается с помощью селекторов CSS3 .... так как с этим бороться?

Ответы [ 4 ]

3 голосов
/ 31 октября 2009

Если вы обнаружите, что Sizzle / jQuery не может применить ваш селектор CSS3, возможно, лучше использовать плагин XPath , который был частью оригинальной версии jQuery (а затем удален, так как мало кто на самом деле использовал Это).

Реализация XPath в браузерах имеет тенденцию быть намного быстрее , чем движки CSS. Кроме того, JS-анализ и преобразование выражения XPath в CSS3, а затем jQuery munge - это то, что браузер может реализовать (как правило, селекторы CSS2.1 с небольшой помощью JS) будет на намного медленнее, чем выполнение XPath прямо в браузере.

Не только это, но есть вещи, которые XPath может делать, чего не может CSS. Например:
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[fn:floor(value) > 3]
который не слишком сложен для выполнения XPath, но невозможен только для CSS - перемещение обратно вверх по DOM и выполнение функции как части выражения пока не может (насколько мне известно) сделать даже в CSS3.

0 голосов
/ 30 января 2015

Искал совсем немного и наконец нашел эти 2 библиотеки. Надеюсь, это поможет кому-то так же потерянному, как и я:

  1. Джеймс Падолси CSS2XPATH , который использовался в YQL HTML в какой-то момент время
  2. css2xpath - универсальный преобразователь CSS в XPath

Поскольку это довольно нишевая область, я приветствую сообщество внести изменения в него.

0 голосов
/ 01 июня 2011

Движок локатора CSS Selenium 1 перемещен из CSSQuery в Sizzle, библиотеку селекторов CSS jQuery. Так что вы можете конвертировать

div[3]/ul/li[1]/a[5] 

до

css=div:nth(3)>ul>li:nth(1)>a:nth(5)

и

//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3] 

можно преобразовать в

css=h3.blog-title:parent(div.blog-entry) input[value=3]

однако //input[@value>3] не может быть возможным или хитрым Для получения дополнительной информации посетите: https://github.com/jquery/sizzle/wiki/Sizzle-Home

0 голосов
/ 07 апреля 2011

Реализация xpath в IE очень и очень медленная. даже ужасно медленный в IE6, поэтому большинство склонны использовать CSS-селекторы, основанные на регулярных выражениях и т. д., такие как sizzle или новейший qwery для выбора индекса вы используете в CSS селектор :nth-child(n)

a[5] = :nth-child(5)

Я не могу вспомнить, начинается ли он с 0 или 1, поэтому он также может быть 4.

также, если у вас есть разные типы детей в родительском элементе, которого вы выбираете, вы можете использовать :nth-of-type(), который выбирает только данный тип. в вашем случае:

a:nth-of-type(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...