benötigen Sie einen JavaScript oder jQuery-Bibliothek XPath wählbar CSS3-Format in Jquery zu konvertieren
-
22-07-2019 - |
Frage
Wie kann ich konvertieren XPath wie
/html/body/div[3]/ul/li[1]/a[5]
html > body > div[3] > ul > li[1] > a[5]
ich glaube, Index nicht mit CSS3-Selektoren unterstützt wird .... so, wie man damit umgehen?
Lösung
Wenn Sie feststellen, dass Sizzle / jQuery können Ihre CSS3-Selektor nicht anwenden, es könnte besser sein, verwenden Sie die XPath-Plugin die einen Teil der ursprünglichen Version von jQuery (da nur wenige Menschen es tatsächlich und dann entfernt verwendet) war.
XPath-Implementierungen in den Browsern neigt viel schneller als die CSS-Motoren zu sein. Auch mit JS analysiert und einen XPath-Ausdruck in CSS3 konvertiert dann jQuery munge mit, dass in etwas den Browser (in der Regel CSS2.1 Selektoren mit einem wenig JS assistance) implementieren kann sein wird, viel langsamer als die Ausführung die XPath direkt im Browser.
Nicht nur das, aber es gibt Dinge, die XPath, dass CSS tun können, kann es nicht. Zum Beispiel:
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[fn:floor(value) > 3]
das ist nicht zu komplex für XPath auszuführen, aber unmöglich für CSS allein - wieder auf das DOM zu bewegen und eine Funktion als Teil des Ausdrucks ausführen kann (mein Wissen) noch getan werden, auch in CSS3
Andere Tipps
Selenium 1 CSS-Locator-Engine von CSSQuery bewegt brutzeln, Wahl Bibliothek jQuery CSS. So können Sie konvertieren
div[3]/ul/li[1]/a[5]
css=div:nth(3)>ul>li:nth(1)>a:nth(5)
und
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3]
können umgewandelt werden
css=h3.blog-title:parent(div.blog-entry) input[value=3]
jedoch //input[@value>3]
kann nicht möglich sein, oder schwierig sein
Für weitere Informationen besuchen Sie bitte: https://github.com/jquery/sizzle/wiki/Sizzle- Startseite
die XPath-Implementierung in IE ist sehr, sehr langsam. sogar erschreckend langsam in IE6 ist, warum die meisten neigen dazu, CSS-Selektoren auf Basis von regex usw. wie Zischen oder die neueste ist qwery.
für einen Index wählen Sie in CSS verwenden die Auswahl :nth-child(n)
a[5] = :nth-child(5)
ich kann nicht daran erinnern, ob es mit 0 oder 1 beginnt, so könnte es auch 4.
sein Auch wenn Sie verschiedene Arten von Kindern im Mutter haben Sie in auswählen, können Sie :nth-of-type()
verwenden, die nur den gegebenen Typ auswählt. in Ihrem Fall:
a:nth-of-type(5)
Die Suche nach einem recht wenig und fand schließlich diese zwei Bibliotheken. Hoffe, es hilft jemand wie mich verloren:
- James Padolsey CSS2XPATH , die von YQL HTML an einer Stelle verwendet wurde, von Zeit
- css2xpath - Eine generische CSS XPath Transformator
Da dies eine ziemlich Nische begrüße ich die Community-Änderungen dazu zu machen.