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

Creating a constant time data structure for DOM element references

本文关键字:常数 时间 数据结构 创建 引用 DOM 元素      更新时间:2023-09-26

相关讨论。

我知道我可以构建一个引用元素/节点的数组。我还意识到,我可以使用一个巧妙的技巧,将数组视为堆(索引2n2n+1为儿童)来构建一个(可能浪费的)二叉搜索树。

但是所有这些对于我这个不成熟的优化者来说还不够。此外,实现BST将容易出现bug。

这是我的问题。我可以以某种方式使用元素引用作为索引到javascript的哈希(这是对象,反之亦然?)。如果不是,我能否从元素引用中召唤出一个唯一的字符串,然后将其用作散列键?如果不是,jQuery到底是怎么做到的?

最简单的选择是在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时检索它。很容易看出它的作用