我可以使用什么代替 id 属性,以防可能有重复项

What can I use instead of the id attribute, in case there might be a duplicate?

本文关键字:可能有 属性 可以使 什么 id 我可以      更新时间:2023-09-26

我知道 DOM 中的几乎任何项目都可以有一个"id"属性,我一直在使用它来跟踪客户端表中的每个客户端。我也知道,你不应该重复任何id。在我的代码中,行的 id 设置为每个人的"clientId",它来自数据库中的唯一键,因此不会有重复......但是页面上的其他地方是一个"问题"表,我一直在其中将每行的 ID 设置为"issueId"(再次是唯一键),但我意识到 clientId 可能与 issueId 匹配,我不知道后果。

我正在寻找一种方法来识别每一行,以便以后可以调用它们。我可以使用其他属性来首选吗?分配 ID 时,我应该只在数字前面添加"client"一词吗?我想使用标准做法,并在这里拥有一个快速的网络应用程序。

如果客户端和问题编号匹配,那也没关系,因为我将始终知道我要查找哪一个,并且在寻找它时我可以先向下钻取到表。我只是不想使用"id",因为重复 id 是非法的。例如,如果我正在寻找一个问题,我可以使用类似的东西。 document.getElementById("issueTable").getElementBySOMETHING(issueId)而不仅仅是document.getElementBySOMETHING(issueId)

使用 class 而不是 id

getElementsByClassName(); // needs a shim for IE8 and lower

为了确保没有冲突,您可以为 id 值添加唯一的前缀,例如 client-Xissue-X
现在,即使它们共享相同的键,由于此前缀,每个 id 属性也不同。然后,您可以按如下方式修改查找代码

document.getElementById('issue-'+key); // get by issue
document.getElementById('client-'+key); // get by client

这意味着您可以在一次查找中获取元素并使用最快的方法之一getElementById。此外,此方法意味着,如果您想使用 CSS 规则以不同的方式设置元素样式,则不会有上一代浏览器在以数字开头的键时遇到问题。

getElementById() - 按元素的 ID 返回对元素的引用。

getElementsByClassName() - 返回一组具有所有给定类名的元素。在文档对象上调用时,将搜索整个文档,包括根节点。您也可以在任何元素上调用 getElementsByClassName;它将仅返回作为具有给定类名的指定根元素的后代的元素。

getElementsByTagName() - 返回具有给定标记名称的元素列表。将搜索指定元素下的子树,不包括元素本身。返回的列表是实时的,这意味着它会使用 DOM 树自动更新自身。因此,没有必要使用相同的元素和参数多次调用 element.getElementsByTagName。

querySelectorAll() - 返回文档中与指定选择器组匹配的元素列表(使用文档节点的深度优先预序遍历)。返回的对象是一个节点列表。

字体:

http://www.quirksmode.org/dom/w3c_core.html#gettingelements

https://developer.mozilla.org/en-US/docs/DOM/