Javascript HTML元素的唯一标识符

Javascript HTML元素的唯一标识符,javascript,html,dom,Javascript,Html,Dom,除了ID之外,如果您说,您还需要一个HTML元素的唯一标识符(比如div) 我在DOM中浏览每个元素唯一的东西(如数字或字符串);但是DOM很大,我在互联网上找不到 是否有任何属性(在DOM中)仅对该元素是唯一的?(除了ID之外,您也不指定它,但在构建DOM时会出现)有name属性,可以通过document.getElementByName作为地址 我认为不存在其他唯一标识符-即使您可以通过将属性(如title)设置为唯一值,然后查询该值来模拟一个唯一标识符。但这是胡扯 你到底需要这个做什么?如

除了ID之外,如果您说,您还需要一个HTML元素的唯一标识符(比如div)

我在DOM中浏览每个元素唯一的东西(如数字或字符串);但是DOM很大,我在互联网上找不到


是否有任何属性(在DOM中)仅对该元素是唯一的?(除了ID之外,您也不指定它,但在构建DOM时会出现)

name
属性,可以通过
document.getElementByName
作为地址

我认为不存在其他唯一标识符-即使您可以通过将属性(如
title
)设置为唯一值,然后查询该值来模拟一个唯一标识符。但这是胡扯


你到底需要这个做什么?如果您提供有关您的情况的更多信息,可能会有人提出建议。

我能想到的唯一其他标识符是文档中元素的XPath

例如,这个页面标题内的title链接的XPath为

/html/body/div[3]/div[2]/div/h1/a

但就像佩卡已经说过的,这取决于你想做什么。而且我认为,尽管现在JS引擎中有Xpath,但在JavaScript中从DOM中获取Xpath并不容易。

正如Pekka所说,如果您能够描述您想要做的事情,那么就更容易了。在此之前,有两条建议

除非您确实需要将id表示为某种字符串,否则您可以保存普通DOM引用

如果出于某种原因确实需要将其表示为字符串,则需要自己分配一个唯一的id

var getId = (function () {
  var incrementingId = 0;
  return function(element) {
    if (!element.id) {
      element.id = "id_" + incrementingId++;
      // Possibly add a check if this ID really is unique
    }
    return element.id;
  };
}());

您可以使用库或自己的卷来创建唯一标识符。JQuery有:

存储与匹配元素关联的任意数据或返回 集合中第一个元素的命名数据存储中的值 匹配元素


Internet explorer对每个元素都有一个属性“uniqueID”。问题是其他浏览器不支持它。

我遇到了同样的情况,当我在Chrome dev tools inspector中查看一些DOM元素时,我注意到它们似乎都有一个类似于jQuery1120892710877873282的属性,并分配了一个唯一的编号。显然,每次加载页面时,“jQuery”后面的数字都不一样,我猜jQuery每次试图访问或操作任何DOM元素时都会在内部生成这个数字。我对它进行了一些操作,看起来jQuery从未访问/操作过的元素可能没有这个属性,但是当您执行类似于
$(elem)
的操作时,这个属性就会出现。因此,由于我们同时使用jQuery和lodash,我设计了以下函数来返回唯一的ID,而不管元素是否实际具有DOM ID属性

_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0)

FWIW,IE提供了一个DOM对象,当访问该对象时,会为该元素生成一个唯一标识符。它不是规范的一部分,也不会在其他浏览器中对您有所帮助。我创建了一个带有垫片的应用程序,将IE的uniqueID功能添加到其他浏览器中。正在寻找类似于prototype中的identify功能的解决方案。不幸的是,我使用的是jQuery。我想我最好创建自己的标识函数。@Andy Xpath在现代浏览器中可用。我只是不认为有一种方法可以通过某种本机函数将Xpath传递到节点。至少我不知道有什么。@AndyE我想是时候把它变成W3C的推荐了,你不觉得吗?它对于操作DOM非常有用。@risto我认为主要的问题是DOM很少是完全静态的,从根元素到目标元素都是可预测的。对DOM的任何更改都会使您以前获得的xpath无效,只依赖类名、唯一ID或使用与具有这些属性的元素相关的选择器更安全。@而且xpath对于端到端测试非常有用,您知道何时以及如何操作DOM。不必依赖Selenium这样的IDE会很好。在使用jQuery时,我应该让您了解它的
data
函数,您可以使用它为元素分配任何类型的信息:事实上jQuery本身使用一个unqiue ID来实现这一点,但是,我不确定是否能够以任何可靠的方式访问该ID。我发现这是jQuery
expando
属性,有关它的更多信息请参见: