相关讨论。
我知道我可以构建一个引用元素/节点的数组。我还意识到,我可以使用一个巧妙的技巧,将数组视为堆(索引2n
和2n+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时检索它。很容易看出它的作用