您可以尝试为元素生成 XPath 字符串 - 字符串越复杂,标识符就越准确和便携。
例如,一个简单的仅元素 XPath 查询字符串不会很独特,并且可能会再次出现:
'//html/body/div/div/p/strong'
考虑所有属性可能有点过头了
'//html/body[@onclick="somereallylongjavascript" and class="nosidebar"]/div[@id="wrapper" and @class="posts"]/div[@class="entry" and @id="firstentry"]/p[@class="first"]/strong'
但是您可能会通过限制某些属性(可能只是 ID)找到一个不错的中间立场:
'//html/body/div[@id="wrapper"]/div[@id="firstentry"]/p/strong'
您可以在所有浏览器中本地检索 XPath。有W3C方法:
var myElement=document.evaluate(
XPathstring,
document,
function(ns){return{'html':'http://www.w3.org/1999/xhtml','':null}[ns];},
9,
null
).singleNodeValue;
(ns函数纯粹是你需要application/xhtml+xml支持)
IE 方法更简单,但灵活性较差:
var myElement=document.selectSingleNode(XPathString);
当然,创建 XPath 字符串是一个不同的问题 - 有多种选择,不幸的是没有原生的。 XPather 是一个 moz 附加组件,它提供了一个执行此操作的接口 - 它的源代码是 MPL 版并且相对简单,但可能超出您的需要。有多种较短的脚本可以提供更简单的解决方案。
编辑: Justin Johnson 提供了一个指向 SO 答案的链接,其中包含一个非常短的 XPath 生成函数。这有点简单,它使用奇怪的 id 表示法(id(blah) 而不是 [@id="blah"])并且不会 toLowerCase() 它的 tagNames 可能会损害便携性,但除此之外,它看起来非常适合您的需求。