Проблема при использовании appendChild или innerHtml - PullRequest
1 голос
/ 10 июня 2011

Я хочу добавить свои tr и td в tbody, используя javascript, а не jQuery.В настоящее время я использую jquery .html (), я хочу изменить его с помощью Javascript.

var arrStrData = [];

for (i = 0; i < objData.length; i++) {
    arrStrData.push("<tr>");
    arrStrData.push("<td>");
    arrStrData.push(objData[i].FirstName);
    arrStrData.push("</td>");
    arrStrData.push("<td>");
    arrStrData.push(objData[i].LastName);
    arrStrData.push("</td>");
    arrStrData.push("<td>");
    arrStrData.push(objData[i].Gender);
    arrStrData.push("</td>");
    arrStrData.push("<td>");
    arrStrData.push(objData[i].Country);
    arrStrData.push("</td>");
    arrStrData.push("<td>");
    arrStrData.push(objData[i].Password);
    arrStrData.push("</td>");
    arrStrData.push("</tr>");
}
$("tbody").html(arrStrData.join(''));

Ответы [ 4 ]

1 голос
/ 10 июня 2011

Как минимальное изменение в вашем текущем коде, вы можете следовать за ним:

var div = document.createElement('div');
div.innerHTML = '<table><tbody>' + arrStrData.join('') + '</tbody></table>';
var tbody = document.getElementsByTagName('tbody')[0];
tbody.parentNode.replaceChild(
  div.getElementsByTagName('tbody')[0], tbody
);

Более общая версия может быть:

var tbody = document.getElementsByTagName('tbody')[0];
var frag = document.createDocumentFragment();
var oRow = document.createElement('tr');
var oCell = document.createElement('td');
var propArray = ['FirstName','LastName','Gender',
                 'Country','Password'];
var row, cell, obj;

for (var i=0, iLen=objData.length; i<iLen; i++) {
  row = oRow.cloneNode(false);
  o = objData[i]

  for (var j=0, jLen=propArray.length; j<jLen; j++) {
    cell = oCell.cloneNode(false);
    cell.appendChild(document.createTextNode(o[propArray[j]]));
    row.appendChild(cell);
  }
  frag.appendChild(row);
}

tbody.appendChild(frag);

Выше приведены общие подходы, которые выможет адаптироваться к вашим обстоятельствам.

1 голос
/ 10 июня 2011

Будет работать, только если есть только один tbody элемент (как в вашем примере с jQuery).

document.getElementsByTagName("tbody")[0].innerHTML=arrStrData.join('');

jsFiddle Demo

Вы былучше определить id на table или tbody и использовать document.getElementById().

0 голосов
/ 10 июня 2011

Как вы уже используете jQuery, почему бы не использовать его , чтобы помочь вам, вот что это такое в конце концов.

var useKeys = ['FirstName', 'LastName', 'Gender', 'Country', 'Password'],
    html = '';

for (var i = 0; i < objData.length; i++) {
    var row = $(useKeys).map(function(value, key) {
        var value = objData[i][key];
        return '<td>' + (value == undefined ? '' : value) + '</td>';
    }).get();

    html += '<tr>' + row + '</tr>';
}

$('tbody').html(html);

Рабочая скрипка

0 голосов
/ 10 июня 2011

Пожалуйста, смотрите следующий URL о реализации addRow в таблице с использованием собственного JavaScript.

http://www.mredkj.com/tutorials/tableaddrow.html

...