将xPath转换为jQuery选择器

5
我该如何将以下xPath转换为jQuery 1.10选择器?
/html/body/div[4]/div[2]/div/div/div/ul/li[4]

我想使用这个结果来做类似这样的事情:
jQuery('selector').hide(); 
2个回答

7

好的,这是一个识别语法差异的问题:

  • XPath使用/作为父/子分隔符,而CSS/jQuery选择器使用>
  • XPath使用以1为基础的方括号来表示索引,而jQuery使用:nth-child()伪选择器。

所以:

let xpath = '/html/body/div[4]/div[2]/div/div/div/ul/li[4]';
let jq_sel = xpath
    .substr(1) //discard first slash
    .replace(/\//g, ' > ')
    .replace(/\[(\d+)\]/g, ($0, i) => ':nth-child('+i+')');

这个工作得很好,除了处理nth-child选择器。我似乎无法在JQuery 3+中使其工作。也许他们改变了什么。否则,只要不必到达特定的子元素,就足够好用了。根据@razielx4crazy的答案,我进行了一些微小的更改来纠正这个问题。 - JRSofty
似乎'nth-child'匹配任何标签,而xpath div[x]将匹配第x个div(而不是其他标签)。 - Dee

3
这将类似于这样:
$('html body div:eq(4) div:eq(2) div div div ul li:eq(4)')

我不确定 div 具体是指什么,也许可以像这样另外一个:

$('html body div:eq(4) div:eq(2) div:first div:first div:first ul li:eq(4)')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接