除了ID之外,如果你说,你想要一个HTML元素的唯一标识符(比如说div)。
我浏览了DOM,找到了每个元素唯一的东西(如数字或字符串);但DOM很大,我在互联网上找不到它。
是否有任何属性(显然在DOM中)仅对该元素是唯一的? (除了ID之外,您也没有指定它,但是在构造DOM时会出现)
答案 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)