2

DOM 要素の参照に問題があり、innerHTML の更新と関係があることを突き止めたと思います。

この例では、予想どおり、最初のアラートで 2 つの変数が同じ要素を参照しています。奇妙なのは、親要素 (本文) の innerHTML を更新した後、どちらにも触れていないにもかかわらず、2 つの変数が異なると思われることです。

<html>
<head>
  <script type="text/javascript">

  var load = function () {
    var div1 = document.createElement('div');
    div1.innerHTML = 'div1';
    div1.id = 'div1';

    document.body.appendChild(div1);
    alert(div1 === document.getElementById('div1')); // true

    document.body.innerHTML += '<div>div2</div>';
    alert(div1 === document.getElementById('div1')); // false
  };

  </script>
</head>

<body onload="load();">
</body>

</html>

=== の代わりに == を使用しても、同じ結果が得られます。Firefox 3.5 と IE6 で同じ結果が得られます。2 番目のアラートが false と評価される原因は何ですか?

4

2 に答える 2