Javascript: DOM, appendChild - пара вопросов - PullRequest
0 голосов
/ 30 июля 2011

Я только изучаю этот материал, поэтому, пожалуйста, прости, если мой код или вопросы очень просты.

Мой "рабочий код" (без ошибок и т. Д.), Просто чтобы вы знали, что у меня есть:

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"),

, и причина этого в том, что если у меня нет "снова объявлено, первый перезаписывается, а второй не отображается ...
А) Это правильный способ сделать это?(не уверен, что это правильный подход, я пришел к решению объявить другую переменную, чтобы заставить ее работать, но это похоже на дополнительный код)

Тогда эта строка кода:

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

просто добавляет туда весь материал из цикла: (
Например, первая итерация цикла for () имеет abc, а вторая имеет def, она отображает abcdef вместо abc в первый рази def второй.
B) Почему это так и как мне это исправить?

Спасибо!

1 Ответ

2 голосов
/ 30 июля 2011

Ваш цикл for выполняется для одного и того же экземпляра с каждой итерацией. Вы не получите несколько строк данных, если не выполните:

document.createElement("TR");
document.createElement("TD");

в теле цикла. В противном случае вы абсолютно правы: вы просто добавляете один и тот же текст в одну и ту же строку и ячейку таблицы на каждой итерации цикла.

Похоже, вам нужно изменить свой подход на что-то вроде:

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

...