XPath
跳转到导航
跳转到搜索
示例
.- 当前节点
..- 父节点
text()- 节点内的所有文本节点[1]
a/@href- 节点的指定属性值
//a[not(starts-with(@href,"mailto:"))]- 所有
href属性不以mailto:开头的<a>标签 //a/sup/parent::a- 选取父节点:所有含有子节点 sup 的 a 节点
//tr[count(td)=2]- 包含两个
节点的节点[2] a[contains(concat(' ', normalize-space(@class), ' '), ' b ')]- 等价于 CSS 中的类选择器
//a[@rel="next"]/preceding-sibling::a[1]/text()- 指定节点的前一个姊妹节点的文本
//p/following-sibling::br- 跟着 p 节点的 br 节点
在浏览器中使用
// ==UserScript==
// @name Wikipedia 语言链接顺序调整
// @description 将维基百科中的中英文语言链接放到最前面
// @namespace https://blog.lilydjwg.me/
// @include https://*.wikipedia.org/*
// @include https://*.wiktionary.org/*
// ==/UserScript==
var links = document.evaluate('//*[@id="p-lang"]//a[text()="中文" or text()="English"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var ul;
for(var i=0, len=links.snapshotLength; i<len; i++){
var link = links.snapshotItem(i);
ul = ul || link.parentNode.parentNode;
ul.insertBefore(link.parentNode, ul.firstChild);
}
关于document.evaluate的参数,参见Introduction to using XPath in JavaScript | MDN。