benötigen Sie einen JavaScript oder jQuery-Bibliothek XPath wählbar CSS3-Format in Jquery zu konvertieren

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

  •  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?

War es hilfreich?

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:

  1. James Padolsey CSS2XPATH , die von YQL HTML an einer Stelle verwendet wurde, von Zeit
  2. css2xpath - Eine generische CSS XPath Transformator

Da dies eine ziemlich Nische begrüße ich die Community-Änderungen dazu zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top