Safari における空白文字のみのテキストノードの扱い

説明とソース例

空白文字」とは、文字どおりのスペースと改行の事。

以下のような 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 の実装はつまり、最初の子ノードがテキストノードで、かつ内容が改行文字のみの場合に、そのテキストノードの存在を無視するというもの。しかし、そのノードの内容に空白(ホントの空白)がひとつでも含まれてる場合は無視はしないという。なんでこんな扱いづらい実装になってるんだ…。


Copyright © 1998-2006 ALIMIKA SATOMI/NYAN-NYAN-HANTEN.Created: 2003/02/14, Last-modified: 2003/11/11