0

これには本当に簡単な答えが必要だと思いますが、まだ頭を悩ませており、Google は役に立ちません。要素に関する情報を配列に格納しようとしています。ただし、Google Chrome では、2 番目の要素に関する情報を設定すると、最初の要素が上書きされます。コードの簡略化されたバージョンは次のとおりです。

<!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
4

1 に答える 1

2

するとき

foo[ bar ] = someValue;

barは文字列値に変換され、プロパティ名 (割り当て先) として使用されます。あなたの場合、DOM 要素は のような文字列に変換されます'[object HTMLDivElement]'両方の要素が DIV である場合、それらは同じ文字列値に変換されます。そのため、2 番目の割り当てが最初の割り当てを上書きします。つまり、両方の割り当てが同じプロパティに割り当てられます。

あなたが達成しようとしていることは、単純な配列では実装できません。

于 2013-02-03T22:38:51.113 に答える