Search code examples
javascriptjqueryjquery-pluginsjavascript-frameworkjqote

What is the fastest way to create HTML table with data from JavaScript array?


I have the following code to convert my JSON dataset to html table. I want to know if it is the fastest method, or should I use jqote2 with jquery to write template?

Requirements:

  • can change col definitions with a click (client can change how to view table, col definition array will change, and table can be rebuilt)
  • sorting, filter & pagination (I believe raw data can be sorted and table can be rebuilt)
  • conversions (If say 1 col contains data of length in different units, than a new col in raw data set can be added having data in 1 same unit so that data can be sorted)

So can somebody guide me if I am on right track or am I working on something that already exists?

<div id="hii"><!-- table loads here --></div>

<script>
var set1={ // JSON dataset & col definitions
    'col':[ // definition/template of data to load in column cells
        [function(x){return '<a href="?sid='+x[1]+'">'+x[0]+'</a>';}],
        [function(x){return '<a href="?id='+x[2]+'">'+x[2]+'</a>';}],
    ],
    'data':[ // raw data, output table has only 2cells/row using these 3 values from each row
        ['Name 1','00000001','Value 1'],
        ['Name 2','00000002','Value 2'],
        ['Name 3','00000003','Value 3'],
        ['Name 4','00000004','Value 4'],
        ['Name 1','00000001','Value 5'],
        ['Name 5','00000005','Value 1'],
        ['Name 6','00000006','Value 1'],
        ['Name 7','00000007','Value 2'],
        ['Name 8','00000008','Value 6'],
        ['Name 9','00000009','Value 3'],
        ['Name A','00000010','Value 7'],
        ['Name B','00000011','Value 7'],
        ['Name C','00000012','Value 1'],
    ],
};
function tbody(x){ // function to create table, using dataset name passed to x
    for(i=0,data='';i<x.data.length;i++){
        data+='<tr>';
        for(j=0;j<x.col.length;j++){
            data+='<td>'+x.col[j][0](x.data[i])+'</td>';
        }
        data+='</tr>';
    }
    return data;
}
document.getElementById('hii').innerHTML='<table>'+tbody(set1)+'</table>';
</script>

Solution

  • You can use Datatables. It works with jQuery and is also themable. There are quite a few options you can set that can meet your requirements, and even more.