Existe-t-il un moyen vraiment simple de prendre un tableau d'objets JSON et de le transformer en un tableau HTML, à l'exception de quelques champs ? Ou vais-je devoir le faire manuellement ?
J'ai du mal à contrôler l'ordre des colonnes.
Existe-t-il un moyen vraiment simple de prendre un tableau d'objets JSON et de le transformer en un tableau HTML, à l'exception de quelques champs ? Ou vais-je devoir le faire manuellement ?
L'utilisation de jQuery rendra cette tâche plus simple.
Le code suivant prend un tableau de tableaux et les convertit en rangées et en cellules.
$.getJSON(url , function(data) {
var tbl_body = "";
var odd_even = false;
$.each(data, function() {
var tbl_row = "";
$.each(this, function(k , v) {
tbl_row += "<td>"+v+"</td>";
});
tbl_body += "<tr class=\""+( odd_even ? "odd" : "even")+"\">"+tbl_row+"</tr>";
odd_even = !odd_even;
});
$("#target_table_id tbody").html(tbl_body);
});
Vous pourriez ajouter une vérification pour les clés que vous voulez exclure en ajoutant quelque chose comme
var expected_keys = { key_1 : true, key_2 : true, key_3 : false, key_4 : true };
au début de la fonction de rappel getJSON et en ajoutant :
if ( ( k in expected_keys ) && expected_keys[k] ) {
...
}
autour de la ligne tbl_row +=.
Edit : J'assignais une variable nulle auparavant
Edit : Version basée sur Timmmm 's sans injection contribution.
$.getJSON(url , function(data) {
var tbl_body = document.createElement("tbody");
var odd_even = false;
$.each(data, function() {
var tbl_row = tbl_body.insertRow();
tbl_row.className = odd_even ? "odd" : "even";
$.each(this, function(k , v) {
var cell = tbl_row.insertCell();
cell.appendChild(document.createTextNode(v.toString()));
});
odd_even = !odd_even;
});
$("#target_table_id").append(tbl_body); //DOM table doesn't have .appendChild
});
Je viens de voir ça. Comment puis-je l'écrire pour que le <tr>
a alterné entre avoir une classe paire ou impaire ?
L'ordre des colonnes dépendra de l'ordre dans lequel elles apparaissent dans les données sources. J'ai ajouté un simple alternateur pair/impair à l'OP.
Je ne suis pas sûr que ce soit ce que vous voulez mais il y a jqGrid . Il peut recevoir JSON et faire une grille.
Un autre vote pour jqGrid - vraiment facile à mettre en œuvre, avec une excellente documentation et des exemples, et qui réduit une grande partie du travail pour vous.
Créez un tableau HTML à partir d'un tableau d'objets JSON en étendant $ comme indiqué ci-dessous.
$.makeTable = function (mydata) {
var table = $('<table border=1>');
var tblHeader = "<tr>";
for (var k in mydata[0]) tblHeader += "<th>" + k + "</th>";
tblHeader += "</tr>";
$(tblHeader).appendTo(table);
$.each(mydata, function (index, value) {
var TableRow = "<tr>";
$.each(value, function (key, val) {
TableRow += "<td>" + val + "</td>";
});
TableRow += "</tr>";
$(table).append(TableRow);
});
return ($(table));
};
et l'utiliser comme suit :
var mydata = eval(jdata);
var table = $.makeTable(mydata);
$(table).appendTo("#TableCont");
où TableCont est un div quelconque
Purement HTML, pas vulnérable comme les autres AFAIK :
// Function to create a table as a child of el.
// data must be an array of arrays (outer array is rows).
function tableCreate(el, data)
{
var tbl = document.createElement("table");
tbl.style.width = "70%";
for (var i = 0; i < data.length; ++i)
{
var tr = tbl.insertRow();
for(var j = 0; j < data[i].length; ++j)
{
var td = tr.insertCell();
td.appendChild(document.createTextNode(data[i][j].toString()));
}
}
el.appendChild(tbl);
}
Exemple d'utilisation :
$.post("/whatever", { somedata: "test" }, null, "json")
.done(function(data) {
rows = [];
for (var i = 0; i < data.Results.length; ++i)
{
cells = [];
cells.push(data.Results[i].A);
cells.push(data.Results[i].B);
rows.push(cells);
}
tableCreate($("#results")[0], rows);
});
Pour transformer un tableau JavaScript en 2D en un tableau HTML, vous n'avez besoin que d'un peu de code :
function arrayToTable(tableData) {
var table = $('<table></table>');
$(tableData).each(function (i, rowData) {
var row = $('<tr></tr>');
$(rowData).each(function (j, cellData) {
row.append($('<td>'+cellData+'</td>'));
});
table.append(row);
});
return table;
}
$('body').append(arrayToTable([
["John","Slegers",34],
["Tom","Stevens",25],
["An","Davies",28],
["Miet","Hansen",42],
["Eli","Morris",18]
]));
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
Si vous souhaitez charger votre tableau 2D à partir d'un fichier JSON, vous aurez également besoin d'un peu de code Ajax :
$.ajax({
type: "GET",
url: "data.json",
dataType: 'json',
success: function (data) {
$('body').append(arrayToTable(data));
}
});
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.