нужна библиотека javascript или jquery для преобразования xpath в выбираемый формат CSS3 в jquery

StackOverflow https://stackoverflow.com/questions/1652759

  •  22-07-2019
  •  | 
  •  

Вопрос

как я могу преобразовать XPath, например

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

Механизм локатора 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

Реализация 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)

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

<Ол>
  • CSS2XPATH Джеймса Падолси, который использовался в YQL HTML в один момент время
  • css2xpath - универсальный преобразователь CSS в XPath
  • Поскольку это довольно нишевая область, я приветствую сообщество внести изменения в него.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top