HTML元素的唯一标识符

时间:2010-07-21 11:03:39

标签: javascript html dom

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

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

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

6 个答案:

答案 0 :(得分:17)

正如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;
  };
}());

答案 1 :(得分:4)

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

例如,此页面标题内的标题链接的XPath为

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

但就像佩卡已经说过的那样,这取决于你想做什么。尽管Xpath现在在JS引擎中可用,但我认为你不能轻易地从JavaScript中获取Xpath。

答案 2 :(得分:2)

name可以设置document.getElementByName属性。

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

您可以使用库或滚动自己来创建唯一标识符。 JQuery有.data()

  

存储与匹配元素关联的任意数据或返回   指定数据存储区中第一个元素的值   匹配的元素。

答案 5 :(得分:0)

我刚刚遇到了同样的情况,当我在Chrome开发工具检查器中查看一些DOM元素时,我注意到他们似乎都有一个像ng serve这样的属性被分配了一个唯一的编号。显然,每次加载页面后'jQuery'之后的数字都不同,我的猜测是jQuery每次尝试访问或操作任何DOM元素时都会在内部生成它。我玩了一点,看起来像jQuery从未访问/操作的元素可能没有这个属性,但是当你做jQuery11230892710877873282之类的事情时,属性就会存在。因此,既然我们同时使用了jQuery和lodash,我设计了以下函数来返回一个唯一的ID,而不管该元素是否实际具有DOM id属性。

$(elem)