私は何かをテストしていて、奇妙なバグに遭遇しました(それが本当にバグかどうかはわかりませんが)。
この簡単なドキュメントを取ります
<!DOCTYPE html>
<html><head><meta charset="utf-8">
<script>
window.onload = function() {
var p = document.createElement('p');
p.appendChild( document.createTextNode('x') );
p.appendChild( document.createTextNode('y') );
p.appendChild( document.createTextNode('z') );
document.body.appendChild(p);
console.log( p.childNodes.length );
p.normalize();
console.log( p.childNodes.length );
};
</script></head><body></body></html>
IE 9を除くすべてのブラウザーでは、コンソール出力は最初に3、次に1です。IE-9では両方とも3です。つまり、それnormalize()
はそのことを行っていないことを意味します。さらに驚くべきことは、「ドキュメントモード」をIE 7または8、さらにはクァークモードに変更すると、コンソール出力が3と1になることです。
これはIEのバグですか、それとも何か問題がありますか?
- アップデート -
不思議なことに、要素がDOMに追加されていない場合、IE9も正しい方法で動作します。つまり、上記のコードで、段落を本文に追加する行を削除すると、次のようになります。
document.body.appendChild(p);
次に、IE9コンソールも最初に3、次に1を表示します。
-更新2-
ブラウザがnormalize()
正しく動作するかどうかを確認するための簡単なスクリプト:
var p = document.createElement('p');
// you can not put empty strings -- put blank strings instead
p.appendChild( document.createTextNode(' ') );
p.appendChild( document.createTextNode(' ') );
p.appendChild( document.createTextNode(' ') );
var normalizeOk;
document.body.appendChild(p);
p.normalize();
normalizeOk = p.childNodes.length == 1;
document.body.removeChild(p);
console.log("normalize OK: ", normalizeOk);