precisa de um javascript ou biblioteca jQuery para xpath converter para o formato CSS3 selecionável em jquery

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

  •  22-07-2019
  •  | 
  •  

Pergunta

Como posso converter XPath como

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

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

eu acredito, o índice não é suportado com seletores CSS3 .... assim como lidar com isso?

Foi útil?

Solução

Se você achar que Sizzle / jQuery não pode aplicar seu seletor CSS3 talvez seja melhor usar o XPath encaixe que fazia parte da versão original de jQuery (e, em seguida, removido uma vez que poucas pessoas realmente utilizado).

XPath implementações em navegadores tende a ser muito mais rápido do que os motores CSS. Também ter JS parse & converter uma expressão XPath em CSS3 depois ter jQuery munge que em algo que o navegador pode implementar (geralmente seletores CSS2.1 com um pouco de assistência JS) vai ser muito mais lento do que executar o XPath diretamente no navegador.

Não só isso, mas há coisas que XPath pode fazer que CSS não pode. Por exemplo:
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[fn:floor(value) > 3]
que não é excessivamente complexa para XPath para executar, mas impossível para CSS sozinho -. de volta até o DOM mover e executar uma função como parte da expressão não pode (que eu saiba) ser feito ainda, mesmo em CSS3

Outras dicas

Selenium 1 do motor CSS localizador passou de CSSQuery a chiar, biblioteca seletor CSS do jQuery. Então você pode converter

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

para

css=div:nth(3)>ul>li:nth(1)>a:nth(5)

e

//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3] 

pode ser convertido para

css=h3.blog-title:parent(div.blog-entry) input[value=3]

No entanto //input[@value>3] pode não ser possível ou ser complicado Para mais informações visite: https://github.com/jquery/sizzle/wiki/Sizzle- Início

a implementação XPath no IE é muito, muito lento. mesmo aterrorizante lento isso é IE6 porque a maioria tendem a usar seletores CSS com base em regex etc. como chiado ou o mais novo é qwery. para um índice de escolha que você usa em CSS o :nth-child(n) selector

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

eu não consigo lembrar se ele começa com 0 ou 1 por isso também poderia ser 4.

também se você tem diferentes tipos de crianças dentro do pai que você está selecionando, você pode usar :nth-of-type() que seleciona apenas o tipo de dado. no seu caso:

a:nth-of-type(5)

Procurado para um pouco e finalmente encontrei estes 2 bibliotecas. Espero que ajude alguém tão perdido quanto me:

  1. O James Padolsey CSS2XPATH que foi usado pelo YQL HTML em um ponto de tempo
  2. css2xpath - A CSS genérico para XPath transformador

Como esta é uma área de nicho, saúdo a comunidade para fazer edições a esta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top