我觉得这应该有一个非常简单的答案,但我仍然摸不着头脑,谷歌没有帮助。我正在尝试存储有关数组中元素的信息。但是在谷歌浏览器中,当我设置有关第二个元素的信息时,它会覆盖第一个元素。这是代码的简化版本:
<!DOCTYPE HTML>
<html>
<head>
<script>
var $box = new Array();
$box['test'] = new Array();
function load(){
$box['test'][document.getElementById('box')] = true;
$box['test'][document.getElementById('boxinfo')] = false;
console.log('box: ' + $box['test'][document.getElementById('box')]); // box: false // Should be true
console.log('boxinfo: ' + $box['test'][document.getElementById('boxinfo')]); // boxinfo: false // Should be false
console.log(document.getElementById('box') == document.getElementById('boxinfo')); // false // Should be false
}
</script>
</head>
<body onload="load();">
<div id="box">
<div id="boxinfo">BoxInfo</div>
Box
</div>
</body>
</html>
我怎样才能这样做
$box['test'][document.getElementById('box')] // is true
$box['test'][document.getElementsByTagName('div')[0]] // is true
$box['test'][document.getElementById('boxinfo')] // is false
答案 0 :(得分:2)
做的时候
foo[ bar ] = someValue;
bar
将转换为 String 值,然后将其用作属性名称(正在分配给它)。在您的情况下,您的DOM元素将转换为'[object HTMLDivElement]'
之类的字符串。如果两个元素都是DIV,它们将被转换为相同的 String 值,这就是第二个赋值覆盖第一个赋值的原因,即两个赋值都分配给同一个属性。
您尝试实现的目标无法通过简单的阵列实现。