0

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

我正在寻找一种方法来识别每一行,以便稍后调用它们。是否有另一个我可以使用的属性更适合这个?分配ID时,我应该在数字前添加“客户”一词吗?我想使用标准做法并在这里拥有一个快速的网络应用程序。

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

4

3 回答 3

3

使用class而不是id.

getElementsByClassName(); // needs a shim for IE8 and lower
于 2013-01-25T00:10:04.617 回答
1

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

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

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

于 2013-01-25T00:20:58.200 回答
0

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

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

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

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

字体:

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

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

于 2013-01-25T00:22:39.630 回答