2011-06-23 4 views
0

私は、firefoxがHTML文書のBODY要素の前にリストされているテキストノードと要素ノードをBODY要素の直接の子要素にする方法を確認しました。FF DOMはBODYタグの前にあってもノードをBODYの子として見なすことができますか?

私はxulrunner 2.0.1(Firefox 4.0)を使用していますが、私はInternet Explorerのテキストも動いていますが、要素は見ていません。

例HTML文書1(テキストノードとのタイトル要素は、本体内に移動):

"<html>abc<title>def</title>hij<body>inn<span>e</span>r</body>klm</html>" 

クエリnsIDOMNSHTMLElement.innerHTML使用Body要素にここ

は、これを行うFFの例をいくつか示します。与えられます:

"abc<title>def</title>hijinn<span>e</span>rklm" 

ボディの子要素を繰り返します。

Text : "abc" 
Element : "def" 
Text : "hijinn" 
Element : "e" 
Text : "rklm" 

例HTML文献2(本体が、タイトル内に移動テキストノードではない):

"<html><title>def</title>hij<body>inn<span>e</span>r</body>klm</html>" 

照会nsIDOMNSHTMLElement.innerHTML Body要素に使用し得る:

"hijinn<span>e</span>rklm" 

Bodyの子要素を反復すると、次のようになります。

Text : "hijinn" 
Elemnt : "e" 
Text : "rklm" 

私の質問は、なぜこれが起こっているのですか? innerHTMLでは、2つのbodyタグの間に何が表示されるのでしょうか?

+1

正式なHTMLではないと私は推測しています。法的にテキストのノードは本文の内側にあるはずなので、Firefoxは壊れたマークアップを修正しようとします。 – Yuri

答えて

2

基本的な答えは、「HTML5解析アルゴリズムはそうだから」です。具体的には、<body>の外部には特定のタグのみが許可され、元のデータストリームには存在しないにもかかわらず、他のものは<body>に入ります。

3

これは、BODYタグが省略可能であり、パーサが省略されていると仮定しているためです。タグ自体が省略されている場合、BODY要素はその存在が暗示されているため、DOMにまだ表示されます。

HTML 4.01 specificationは、開始タグと終了タグの両方がBODYエレメントではオプションであることを示しています。

1

無効なHTMLコードを指定したためです。 HTMLパーサは常に無効なHTMLコードを修正します。これは、特に<html>タグの唯一許可された子が<head><body>であることを意味します。 <title>タグは<head>に、テキストノードは<body>にそれぞれ移動します。ブラウザーがこの "タグスープ"をどのように扱うかに興味があるなら、http://dev.w3.org/html5/spec/Overview.html#parsingの下に詳細な仕様があります。

関連する問題