2009-10-30 55 views

回答

3

如果你發現Sizzle/jQuery不能應用你的CSS3選擇器,那麼最好使用XPath plugin,它是jQuery原始版本的一部分(然後由於很少人實際使用它而被刪除)。

瀏覽器中的XPath實現往往比CSS引擎多得多faster。同樣有JS解析&將XPath表達式轉換爲CSS3,然後將jQuery插入瀏覽器可以實現的東西(通常是帶有一點JS幫助的CSS2.1選擇器)將比在執行XPath時慢012%,瀏覽器。

不僅如此,還有些事情是XPath可以做到的,CSS不能。例如:
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[fn:floor(value) > 3]
這對於XPath執行來說並不過於複雜,但對於CSS來說不可能 - 僅僅移動DOM並執行一個函數作爲表達式的一部分不能(據我所知)完成,即使在CSS3中。

0

IE中的xpath實現非常非常慢。甚至可怕的IE6慢這就是爲什麼大多數傾向於使用基於正則表達式的CSS選擇器等喜歡嘶嘶聲或最新的是qwery。 的指數選擇在CSS使用選擇:nth-child(n)

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

如果它與0或1開始,那麼它也可能是4

此外,如果有中不同類型的孩子我不記得你選擇的父母,你可以使用:nth-of-type(),它只選擇給定的類型。在你的情況下:

a:nth-of-type(5) 
0

Selenium 1的CSS定位引擎從CSSQuery移動到Sizzle,jQuery的CSS選擇器庫。 所以,你可以轉換

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]可以不是B e可能或者是棘手的 欲瞭解更多信息,請訪問:https://github.com/jquery/sizzle/wiki/Sizzle-Home

0

搜索了很長時間,終於找到了這2個庫。希望它可以幫助別人爲丟失了我:

  1. 詹姆斯Padolsey的CSS2XPATH這是在 一個時間點使用YQL HTML
  2. css2xpath - 一個通用的CSS與XPath變壓器

由於這是我很歡迎社區對此進行編輯。