Javascript数组中可以使用DOM对象作为索引/键吗?

6

希望能够维护一个DOM对象的映射/哈希表。 它们能够作为键对象吗? 如果不行,有什么替代方案吗? 如果有更好的方法-请列出它们。


1
对不起,你说什么?你能解释一下你想知道什么,或者如果你想要的是可能的输出,如何使用它吗? - David Thomas
1
我认为你想用对象属性{}而不是数组键[]。JavaScript 数组是按数字索引的,而对象字面量具有字符串属性,但有时会使用语法 object["propertyname"] 而不是 object.propertyname - Michael Berkowski
在了解你想要做什么之前,我们无法提供替代方案。 - Lightness Races in Orbit
1
@Michael:不对,每个对象,包括数组在内,严格来说只有字符串属性键(根据规范,实现当然会进行一些优化)。唯一的事情是Array对于"0"、"1"等键有一些特殊处理,以模拟传统的数组数据结构。 - user1046334
6个回答

8
你可以将任何内容作为键,但在实际使用之前,它总是被转换为字符串,并且该字符串被用作键。因此,如果你查看 domObject.toString() 生成的内容,你会发现它并不是一个好的选择。如果你的所有 dom 对象都有一个 id,那么你可以使用该 id。如果没有,而你仍然迫切需要基于 DOM 对象的键,你可能需要使用例如带有自动计数器的 _counter 属性,在后台将新的唯一值放入 DOM 对象中,如果 _counter 尚未存在。

8
不要创造自定义属性。对于这种情况,有一个特殊的 data- 前缀 - katspaugh

1

window 已经将所有 DOM 对象作为属性进行维护。不要为每个“DOM 对象”放置自己的键,而是尝试使用基于 DOM 树布局的索引的 window 或 document 对象和方法。


1
你不能假设DOM布局在查找之间保持不变。 - katspaugh

1

不行,因为对象键是字符串。

你需要通过id或其他方式“序列化”你的对象,然后稍后进行查找。根据你的实际目标,这可能不值得。


0
最简单的方法是在元素上设置数据属性。

0
不可以,但是你可以在包含数字的DOM元素上设置一个属性,该属性可以作为数值索引数组中的索引。

-2

不是很确定,但我认为你想要的类似于以下内容。你可以使用 jquery 来实现。

.serializeArray() 方法创建一个 JavaScript 对象数组,准备编码为 JSON 字符串。它作用于一个 jQuery 对象,该对象表示一组表单元素。表单元素可以是多种类型。

请参考下面的链接: http://api.jquery.com/serializeArray/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接