虽然JS与JQ都能很方便的查找包含了ID及类名的元素,但在某些情况下,我们需要查找一些不包含类名、ID的元素或节点,就需要用XPath来帮忙了。
XPath虽然是被设计用来搜寻XML文档的,不过它也能很好的在HTML文档中工作,并且大部分浏览器都支持通过XPath来查询节点。

XPath的基础教程
https://www.runoob.com/xpath/xpath-tutorial.html
http://zvon.org/xxl/XPathTutorial/General_chi/examples.html
http://www.w3school.com.cn/xpath/index.asp
XPath是以路径的形式来查询元素的,并且它在IE与其他浏览器中的查询函数是不一样的,而且返回的形式也略有不同。
如果你的网站需要兼容IE,一定要注意这一点。

大部分现代浏览器采用的是 document.evaluate 这个函数,返回的是一个枚举值,当返回对象为空时表示枚举结束。
var result = document.evaluate("//a[@href]", document, null, XPathResult.ANY_TYPE, null);
while (node = result.iterateNext()){ //自动枚举元素,直到node为空
    // 对 node 执行操作
}

// 如果只查找单个元素,可以简写成这样
// 需要注意的是,XPath中的节点元素是从1开始序列的,而不是从0开始!
var node = document.evaluate("//div[1]").iterateNext();
XPath在IE中的查询函数为 document.selectNodes(xpath),其返回的是一个集合,通过for循环就可以读取所有的元素。
但因为IE返回的是数组集合,所以查询时默认以0作为第一个序列,如需符合W3C规则,则必须添加一个文档描述属性,下面有实例!
// 取得XPath查询的所有节点元素
var nodes = document.selectNodes("//a[@href]");
for (i=0; i<nodes.length; i++){
    // 对 nodes[i] 执行操作;
}

// 这里要注意,IE对于元素的默认索引序列是从0开始的,不符号W3C标准
// 添加下面这行代码,让其符合W3C标准
document.setProperty("SelectionLanguage","XPath"); //设置语言选择
var node = document.selectNodes("//div[1]"); //取得第一个元素