2012-01-26 24 views
2

ループの中で私が残されてる何回の繰り返しのカップルの後innerHTMLがtbodyを追加しています、なぜですか?

if (formFieldData == 'cleanSlate') 
{ 
    document.getElementById('productsTable').innerHTML = ''; 
    // clears what was there before, so we're left with an empty <table> 
} else 
{ 
    document.getElementById('productsTable').innerHTML += '<tr></tr>'; 
} 

をありますので、私はJavascriptを使用してテーブルを作成していますのでかぎ括弧なし..あなたのためのHTMLを表示する方法がわからこれではありません: tbody tr/tr/tbody tbody tr/tr/tbody

なぜそれらのtbodysを挿入しているのですか?

+0

私の質問はあなたのコードを傷つけるのですか? あなたもあなたに私たちにループを渡します、私はあなたの条件付きの権利を読んでいる場合、私はあなたに操作の問題の問題があると思います。 – Relic

+0

私が知っていた限り、TBODYはブラウザに依存した問題です。私は上記のマークBに同意すると思う。他の賢明なのは、すべてのテーブルを作成し、それをインライン化する(すべて1行にする)必要があります。 – TheBlackBenzKid

+0

上記のコメントへの参照:http://stackoverflow.com/questions/7490364/why-do-browsers-still-inject-tbody -in-html5 – TheBlackBenzKid

答えて

3

どのブラウザですか?

とにかくinnerHTML操作のテーブルを実際に構築するべきではありません。これは単なる文字列操作であり、ブラウザーは複数の行を順番に追加する必要はありません。だからあなたの "壊れた" htmlを "クリーンアップ"しようとします。

何もない場合は、少なくとも別の文字列に、表の行を構築して、ループの後のinnerHTMLにvaraibleものが完了します。

もちろん
var rows; 
for(...) { 
    if (...) { 
     rows += '<tr></tr>\n'; 
    } 
} 
document.getElementById('productsTable').innerHTML = rows; 

、この正確なコードは動作しません - それはですほんの一例です

+0

これはまた、ドームへのアクセス頻度が低いため、ブラウザーのロックアウトを軽減するのにも役立ちます。 – scrappedcola

+0

私は 'appendChild()'を使って何かを考えていましたが、それはDOM上で動作し、ブラウザ上で動作する文字列の代わりにDOM要素を渡す必要があります。あなたがここにいるのはおそらく最善の解決策ですが、何かが私の仕事の順序についてまだ気にしています。 – Relic

+0

@relic:domツリーを「結合されていない」ブランチとして構築し、後で追加することができます。 –

関連する問題