为DOM元素引用创建常量时间数据结构

时间:2011-09-28 03:28:00

标签: javascript

Relevant discussion

我知道我可以构建一个对元素/节点的引用数组。我还意识到我可以使用处理数组的巧妙技巧(如子代的2n2n+1)来构建一个(可能浪费的)二进制搜索树。

但对于我这个过早的优化者来说,这还不够。此外,实施BST将容易出错。

这是我的问题。我可以以某种方式使用元素引用作为javascript的哈希(它们是对象,或反之亦然?)的索引。如果没有,我可以从元素引用中找出一个唯一的字符串,然后我可以将其用作我的哈希键吗?如果没有,jQuery怎么做呢?

1 个答案:

答案 0 :(得分:1)

最简单的选择是在DOM对象上使用自己的属性:

var element = document.getElementById("test");
element.myData = "whatever";

以下是jQuery的.data()函数如何工作的一般概念,您可以在自己的普通javascript中使用它。它在对象上使用一个自定义属性,然后将其他所有内容存储在由该自定义属性的值索引的数据结构中。

var idCntr = 0;   // global cntr

var data = {};
var element = document.getElementById("test");
var id = element.uniqueID;
if (!id) {
    id = idCntr++ + "";
    element.uniqueID = id;
}
data[id] = "whatever";


// then some time later, you can do this
var element = document.getElementById("test");
console.log(data[element.uniqueID]);   // whatever

为数据对象中的给定对象存储多个属性需要更多参与,但这是一般的想法。

而且,如果你可以使用jQuery,那很简单:

$("#test").data("myData", "whatever");  // sets the data

console.log($("#test").data("myData"));   // retrieves the data

如果你想真正了解jQuery的.data()是如何工作的,你可以通过第一次调用来设置数据,然后在使用未明确的jQuery时检索它。很容易看出它的作用。