「空白文字」とは、文字どおりのスペースと改行の事。
以下のような HTML ソースにおいて、 div 要素が内部に持つノードとその順番(番号)がどうなってるか、それを調べるスクリプトを動かして見てみるとします。
<div id="sampleNode">
<p>p要素1</p>
<p>p要素2</p>
</div>
これがその div 要素
p要素1
p要素2
以下に結果が表示されます。表示されていない場合は、ブラウザがこのスクリプトに未対応か、もしくはスクリプトの動作が OFF にされています。
ノード番号 | Safari1.1 (v100) | Gecko | MacIE5.x | WinIE5.5 | WinIE6.0 |
---|---|---|---|---|---|
1. | P | #text | #text | P | P |
2. | #text | P | P | P | P |
3. | P | #text | #text | - | - |
4. | #text | P | P | - | - |
5. | - | #text | #text | - | - |
一つめの p の直前と、それぞれの p の直後には、改行文字のみが入ったテキストノードがあるはずなので、 Gecko と MacIE5 の解釈が正しいと思われ。 WinIE の実装は、空白文字のみのテキストノードはノード数にカウントされない。「そういう“目に見えない”存在を考慮するのは面倒なはずだ」といういつもの「利便優先主義」。 Safari の実装は、厳密にいくのか利便を優先するのか、態度が中途半端。
Safari の実装はつまり、最初の子ノードがテキストノードで、かつ内容が改行文字のみの場合に、そのテキストノードの存在を無視するというもの。しかし、そのノードの内容に空白(ホントの空白)がひとつでも含まれてる場合は無視はしないという。なんでこんな扱いづらい実装になってるんだ…。