首选包含许多元素的页面中的id属性或数据属性?

时间:2015-01-17 23:09:52

标签: javascript jquery html

我正在创建一个包含许多很多小部件的HTML页面" (可以是1000的大小,display:none可以通过用户交互动态修改的.data()。 每个小部件都必须包含一些有关它的信息。

目前我一块一块地构建DOM,并为每个小部件添加一个jQuery innerHTML。但是这个小块的构建太慢了(在Parse HTML上花了很多时间),所以我想切换到一种新的方法,我首先构建一个包含所有小部件的字符串,然后用.data()将其添加到DOM中一气呵成。但是这不允许我在构建过程中使用.data()

由于所有小部件都有唯一的ID(目前只存储在id ...),我可以想到两个明显的解决方案:

  1. 为每个窗口小部件提供data-widgetid属性,窗口小部件ID为内容
  2. 为每个小部件提供一个{ID为内容的id属性
  3. (与此同时,我有一个很大的JavaScript哈希,它将widget-id链接到每个widget数据。)

    我更喜欢哪种方法?

    性能和资源是一个问题(也在移动设备上) 根据{{​​1}}属性我干扰了DOM,因此我不知道这是否会产生任何负面影响。 (例如,可能是浏览器开始为内部构建一个额外的查找结构,我可以避免这种情况。我不是浏览器开发人员,所以我不知道是否是这种情况)

2 个答案:

答案 0 :(得分:3)

使用ID。如果要保护DOM的ID名称空间,请使用前缀。例如,其中“123”是唯一ID。如果您的应用程序由数据库驱动,则主键可方便地提供非冲突的ID值。否则,请使用客户端计数器生成唯一ID。

通过document.getElementById可以更快地按ID访问元素。现代浏览器允许这种访问非常快。与自定义属性相比,内部存储也更有效。要访问自定义属性,您必须遍历所有匹配的节点,并将它们与自定义属性的值进行比较。一些旧IE也不支持自定义属性。

答案 1 :(得分:1)

如果您不需要按id获取这些元素,并且只使用它来将数据与元素相关联,我建议您不要使用id

由于id是唯一的,因此浏览器会构建一个哈希表,以便id快速检索元素。

因此,将id添加到许多不需要它们的元素中会不必要地增加哈希表的大小。

平均而言,哈希表中的搜索是O(1),因此大小无关紧要。但是,在最坏的情况下,它是O(n),所以如果可以,最好有一个小桌子。

这样,如果您使用document.getElementById来获取其他元素,则可能会更快。