使用JavaScript创建动态大表

时间:2014-11-22 11:30:36

标签: javascript loops

我正在尝试使用JavaScript动态创建表。

以下是我正在使用的代码(或http://liveweave.com/mqG5iT}:

 function Process(){
         CreatTable(['First Name', 'Last Name', 'Email']);

     }
    function CreatTable(data) {
    var checkbox;
    var table;
    var thead;
    var tr;
    var th;
    var tbody;

    tablearea = document.getElementById('ShowDataID');
    table = document.createElement('table');
    table.id = "ContactsTable";
    thead = document.createElement('thead');
    tr = document.createElement('tr');
    tbody = document.createElement('tbody');

    //create columns input checkbox column
    checkbox = CreateHTMLElement("chkBoxAllEmails", "chkBoxAllEmails", "SelectAllEmails()", "checkbox", "false");
    th = document.createElement('th');
    th.appendChild(checkbox);
    tr.appendChild(th);
    thead.appendChild(tr);

    //create columns FirstName,LastName,Emails
    for (var i = 0; i < data.length; i++) {
        var headerTxt = document.createTextNode(data[i]);
        th = document.createElement('th');
        th.appendChild(headerTxt);
        tr.appendChild(th);
        thead.appendChild(tr);
    }
    table.appendChild(thead);

    //create rows and addind to table
    for (var i = 0; i < 2000; i++) {
        tr = document.createElement('tr');
        checkbox = CreateHTMLElement("11", "11", "11", "checkbox", "11");
        tr.appendChild(document.createElement('td'));
        tr.appendChild(document.createElement('td'));
        tr.appendChild(document.createElement('td'));
        tr.appendChild(document.createElement('td'));

        tr.cells[0].appendChild(checkbox);               tr.cells[1].appendChild(document.createTextNode('John'+i.toString()));
        tr.cells[2].appendChild(document.createTextNode('McDowell'));
        tr.cells[3].appendChild(document.createTextNode('ddd@gmail.com'));

        tbody.appendChild(tr);
        table.appendChild(tbody);
    }
   document.getElementById("TablePagingArea").appendChild(table);
    //return table;
}

function CreateHTMLElement(id, name, onclick, type, value) {
    var HTMLElement = document.createElement('input');
    HTMLElement.id = id;
    HTMLElement.name = name;
    HTMLElement.onclick = onclick;
    HTMLElement.type = type;
    HTMLElement.value = value;
    return HTMLElement;
}

使用1000-3000行的一小组数据可以很好地工作,但是,有些数据集包含超过5000行,导致Firefox崩溃并关闭或无响应。

我的问题是:有没有更好的方法来完成我想要做的事情?

1 个答案:

答案 0 :(得分:1)

  1. 创建一堆元素的最有效方法是创建一个字符串并从该字符串创建元素。

  2. 创建元素字符串的最有效方法是从数组

  3. 加入

    所以你应该重构你的代码

    1. 创建一系列元素,例如a[i] = "<tr><intput type='checkbox'></tr>";
    2. 加入数组以获取一个字符串var s = a.join();
    3. 创建var div = document.createElement('div'); div.innerHTML = s;
    4. 等DOM元素