2011-07-30 10 views
0

私はこのようなことを学んでいるので、私のコードや質問が非常に基本的であれば許してください。Javascript:DOM、appendChild - いくつかの質問

私の「作業コード」あなたは私がこれまで持っているものを知っているだけのように、(エラーなしなど):

var t = document.createElement("table"), 
    tr = document.createElement("tr"), 
    tr2 = document.createElement("tr"), 
    td = document.createElement("td"), 
    td2 = document.createElement("td"), 
    a = document.createElement("a"), 
    strong = document.createElement("strong"); 

t.style.width = "80%"; 
t.style.border = "0"; 
t.cellspacing = "2"; 
t.cellpadding = "2"; 

for (var i = 0; i < nodes.length; i++) { 
    the_table_color = nodes[i].getAttribute("table_color"); 
    the_type = nodes[i].getAttribute("type"); 
    alt_link = nodes[i].getAttribute("alt_link"); 
    link_for_deletion = nodes[i].getAttribute("link_for_deletion"); 
    comment = nodes[i].getAttribute("comment"); 

    tr.bgColor = the_table_color; 
    t.appendChild(tr); 

    td.width = "16%"; 
    td.vAlign = "top"; 
    tr.appendChild(td); 

    strong.appendChild(document.createTextNode(the_type)); 
    td.appendChild(strong); 

    td.width = "16%"; 
    td.vAlign = "top"; 
    tr.appendChild(td); 

    td2.width = "70%"; 
    td2.vAlign = "top"; 
    tr.appendChild(td2); 

    a.href = alt_link; 
    a.appendChild(document.createTextNode(alt_link)); 
    a.target = "_blank"; 
    td2.appendChild(a); 
} 

あなたは上から見ることができるように私は、このビットがあります。

td = document.createElement("td"), 
    td2 = document.createElement("td"), 

をし、その理由は、私は「TD」は再び宣言されていない場合は、最初の1が上書きされ、され、もう1つは表示されません...
A)これは正しい方法ですか? (これは正しいアプローチがあるかどうかわからない、私はそれを動作させるために別の変数を宣言するのソリューションについて来たが、それは余分なコードのように思える)

その後のコード行:

strong.appendChild(document.createTextNode(the_type)); 

だけ(
for()ループの最初の反復の例はabcで、2番目のループはdefです。最初はabcdefを表示し、2番目はdefcdefを表示します。
B)それはなぜですか、どうすれば修正できますか?

ありがとうございます!

+0

まず、コードを正しくインデントする方法を学びます。 WebStorm(またはjsFiddle)のようなエディタは、そのためのボタンを持っています... –

+0

forループの最上位にあるこれらの変数はすべて宣言されていなければなりません...あなたはグローバルな名前空間を汚染しています。 –

+4

男に休憩を与えなさい - 彼は彼が学習していると述べた。 –

答えて

2

forループは、繰り返しごとに同じインスタンスに対して実行されます。

ループ本体内でデータを複数行取得することはできません。それ以外の場合は、まったく同じです。同じ行とテーブルセルに同じテキストを追加するだけです。

それはあなたのような何かにあなたのアプローチを変更する必要があるように聞こえる:あなたのテーブルが一つだけの行またはを構築しているなぜあなたは迷っている場合

var table = document.createElement("TABLE"); 
for(var i = 0; i < nodes.length; i++){ 
    var tr = document.createElement("TR"); 
    var td = document.createElement("TD"); 
    tr.appendChild(td); 
    table.appendChild(tr); 

    // do something to to td  
} 

は、私はあなたの質問を誤解した場合、私に教えてください、しかし、同じセルを繰り返し修正するのは、間違いなく...なぜあなたの質問にもっと分かったら、私に知らせてください。私は投稿を更新します。

ハッピーコーディング。

b

+0

ありがとうブライアン、約15分後に戻ってきますので、あなたが書いた変更を行い、それがそれをテストします:) – Ryan

+0

すべての作業、ありがとう! – Ryan

関連する問題