[PR]テレビ番組表
今夜の番組チェック

Opera CSSバグリスト

DocumentFragmentオブジェクトへのappendChildに失敗する(7.2)

症状

DocumentFragmentオブジェクトに対して何度もappendChildメソッドを実行すると、メソッドの実行に失敗してオブジェクトの中身が空になることがある。

例示

<script type="text/javascript">
function df() {
  var addsource = document.getElementById('source').getElementsByTagName('li');
  var addlist = document.createDocumentFragment();
  for(i = 0; i < addsource.length; i++) {
    addlist.appendChild(addsource.item(i).cloneNode(true));
  }
  
  var distel = document.getElementById('dist');
  distel.appendChild(addlist.cloneNode(true));
}
</script>

<ol id="dist">
<li>↓追加</li>
</ol>
<ol id="source" style="display:none;">
<li>追加</li><li>追加</li><li>追加</li><li>追加</li><li>追加</li>
<li>追加</li><li>追加</li><li>追加</li><li>追加</li><li>追加</li>
</ol>
<p><a href="javascript:df();">スクリプト実行</a></p>
  1. ↓追加

スクリプト実行

「スクリプト実行」のリンクを選択するとol要素にリストアイテムが10個追加されるはずです。

修正状況

報告書き込み

JavaScript について ? な挙動を見つけたので書いて見ます。

Opera 7.22 ja 、Opera 7.23 ja において
DocumentFragment オブジェクトに appendChild を繰り返すと
少ない確率で失敗するようです。
失敗したときは追加先のオブジェクトが空になります。