gpt4 book ai didi

javascript - 将 html-nodes 作为键存储在数组中

转载 作者:行者123 更新时间:2023-12-02 20:32:28 27 4
gpt4 key购买 nike


我想将元素存储为数组中的键,将对象存储为值,例如 -

var arr = [];
arr[ document.getElementById('something') ] = { data: 'something' , fn : function(){ } };

但问题是:如果我将添加另一个元素,其键为:document.getElementById('otherthing')。稍后将尝试获取: arr[ document.getElementById('something') ].data 的值,我将获取 arr[ document.getElementById('otherthing') 的值]
例如:

var arr = [];
arr[ document.getElementById('something') ] = { data: 'something' , fn : function(){ } };
arr[ document.getElementById('otherthing') ] = { data: 'otherthing' , fn : function(){ alert('k'); } };
alert( arr[ document.getElementById('otherthing') ].data ); // alerts "otherthing"
alert( arr[ document.getElementById('something') ].data ); // alerts "otherthing" but suppose to alert "something"

我该如何解决这个问题,我无法通过id保存,因为我想支持其他没有id的节点
谢谢,约西。

编辑:我对此的回答,如果您有更好的答案,请写下来:)(受到卡萨布兰卡的回答的启发)
id 数组:key-integer 节点 id,值节点本身
以及带有 data 和 fn 的数组以及我的 id 的键,它看起来像这样:

var idArray = [],nodeArray = [];

idArray[0] = document.getElementById('hello_ducks');
nodeArray[0] = { data: 'hello ducks!!' , fn : function(){ alert('k'); } };

idArray[1] = document.getElementById('hello');
nodeArray[1] = { data: 'hello' , fn : function(){ } };

var testNode = document.getElementById('hello_ducks'), foundId = -1 /*found id*/;
// Do we have testNode in our array?
for(var i = 0 ; i < idArray.length; i++ ){
if( idArray[i] === testNode ){
foundId = i;
}
}

// Do we found our element?
if(foundId >= 0) {
alert( nodeArray[foundId].data ); // "hello ducks!!"
}

最佳答案

I can`t save by id,because I want to support other nodes with no-id

您应该记住,为了从数组中取回节点,您必须以某种方式识别它。如果一个节点没有任何这样的唯一标识符,那么稍后如何从数组中检索它,甚至如何将它存储在第一个位置?

在像C++这样的低级语言中,每个对象都隐式地有一个唯一的地址,但是在JavaScript中没有这样的东西,所以你需要手动提供一些识别对象的方法,而DOM ID就是最方便的方法。

如果您的某些节点最初没有 ID,最好的方法是简单地分配您自己的唯一 ID。

<小时/>

更新:您发布的解决方案可以工作,但效率不是很高,因为每次需要查找节点时都需要搜索整个数组。为什么不简单地将您自己的 ID 分配给那些没有 ID 的元素呢?例如:

var nextID = 0;
function getID(elem) {
if (elem.hasAttribute('id') == false || elem.id == '')
elem.id = 'dummy-' + (++nodeID);
return elem.id;
}

这样您就可以随时使用 ID 作为 key :

var nodeArray = [];

var e = document.getElementById('hello');
nodeArray[getID(e)] = { ... };

var e = /* element obtained from somewhere, doesn't have an ID */
nodeArray[getID(e)] = { ... }; // still works

关于javascript - 将 html-nodes 作为键存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com