нужна библиотека javascript или jquery для преобразования xpath в выбираемый формат CSS3 в jquery
-
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 библиотеки. Надеюсь, это поможет кому-то так же потерянному, как и я:
<Ол>Поскольку это довольно нишевая область, я приветствую сообщество внести изменения в него.