2012-01-29 6 views
2

javascriptを使用してtbodyのないテーブルを作成するcreateElement/appendChildは、tbodyをFirebugに追加しませんが、innerHTMLを使用してそれを行います。どうして?手動でtbodyを追加する必要がありますか?createElement/appendChildで自動化されたtbodyがありませんか?

+0

私はあなたが 'table.tBodies'を使用できるように手動でtbodyを追加することをお勧めします – Raynos

答えて

0

DOM作成メソッドを使用する場合は、作成した方法で構造を使用する必要があると想定する必要があります。

異なるブラウザで同じ構造を使用する場合は、JavaScriptがHTMLを解析している場合でも、手動で追加する必要があります。その点でブラウザが同じように動作しない可能性があるため、ブラウザに依存しないでください。


Here's an example Firefoxで実行できます。

これは、が無効です。マークアップです。

<p> 
    <div>original</div> 
</p> 

<div>がHTMLを解析したとき...それはこのようにレンダリング残し、<p>から追い出さ

<p>‌</p> 
<div>original</div> 
<p></p> 

しかし、我々はDOMメソッドと同じ構造を作成した場合、Firefoxは」doesnのを取得します訂正はしないでください。

var p = document.createElement('p'); 

p.appendChild(document.createElement('div')) 
    .appendChild(document.createTextNode('new')); 

document.body.appendChild(p); 

だから、結果のDOMは今これです...

<p>‌</p> 
<div>original</div> 
<p></p> 

<p> 
    <div>new</div> 
</p> 

だから、あなたも完全に無効な構造の場合には、それはあなたが見たいの修正を行わないことがわかりますHTMLを解析するとき。

最終的には、ブラウザ間で同じになるという保証はないので、一般的なブラウザの調整や訂正には依存しません。

適切に構造化された有効なHTMLを使用すると、問題を回避できます。

+0

ヒントと例をありがとう!あなたが作成した方法でDOMの作成方法が構造を表示した場合、手動で作成されたHTMLテーブルは、訂正や他の方法を使わずに作成する方法を尊重する必要があります。 – baptx

+0

@baptx:HTMLを使用すると、実際にDOM構造を手動で作成しているわけではありません。あなたは*マークアップ*を使ってそれを作成しています。これは解析してDOM構造に解釈する必要があります。私はそれがブラウザの修正につながるその解釈だと確信しています。 DOMメソッドを使用してDOM構造を構築する場合、解釈は行われません。それは、開発者だけが明示的にこのノードをそのノードに入れていることを示しているので、メソッドはあなたがそれを伝えます。 –

+0

... * DOCTYPE *は、*マークアップ*の解釈においてのみ役割を果たすと考えられますが、メソッドは* DOCTYPE *を実行しようとしません。 –

0

tbody要素の開始および終了タグはオプションであるため、 DOMノードを直接操作することによって、タグ挿入をバイパスします。

手動でtbodyを追加する必要がありますか?

これはやや主観的です。

+0

ありがとう、これはオプションですが、このノードの使い方によって標準が尊重されていません – baptx

関連する問題