2011-10-05 36 views
9

¿Es esta una forma efectiva de rellenar una tabla con datos JSON utilizando jQuery o hay una forma mejor/menos costosa? El número máximo de filas será alrededor de 100. Preferiría no usar un complemento.Rellenar una tabla desde JSON con jQuery

JS:

$.ajax({ 
    url: 'public.json', 
    dataType: 'json', 
    success: function(data) { 
     var row = '<tr class="header">'; 
     for (var i in data.headers) { 
      row += '<th style=""><a href="#" class="sort"><span>' + data.headers[i] + '</span></a></th>'; 
     } 
     row += '</tr>' 
     $(row).appendTo('table.data'); 
     row = ''; 
     for (var i in data.rows) { 
      row += '<tr id="' + i + '">'; 
      row += '<td>' + data.rows[i].date + '</td>'; 
      row += '<td>' + data.rows[i].company + '</td>'; 
      row += '<td>' + data.rows[i].location + '</td>'; 
      ... 
      row += '</tr>'; 
     } 
     $(row).appendTo('table.data'); 
    }, 
}); 

JSON:

{ 
    "headers": { 
     "date": "Date", 
     "company": "Company", 
     "location": "Location", 
     ... 
    }, 
    "rows": [{ 
     "date": "09/18/2011", 
     "company": "Company name", 
     "location": "US", 
     ... 
    }, 
    ... 
} 

EDIT: Esencialmente, estoy tratando de averiguar si la formación de grumos todas las filas en una cadena, convirtiéndolo en un objeto jQuery y luego agregarlo a la mesa es una buena idea, suponiendo que esto se puede hacer varias veces en la página para actualizar los datos.

+0

¿Has mirado en las plantillas jQuery - http: //api.jquery .com/category/plugins/templates /? –

+0

No creo que sea bueno proponer el uso de un complemento que está en versión beta y está sujeto a cambios por motivos de producción. – MacMac

+0

@Floyd "Estos temas de documentación se refieren al plugin de jQuery Templates **". El OP dijo que no querían usar uno. – Bojangles

Respuesta

7

En lugar de la sintaxis .. infor y el fomento de la cadena, me gustaría utilizar el jQuery.each() function

De esta manera:

$.ajax({ 
    url: 'public.json', 
    dataType: 'json', 
    success: function(data) { 
     var $tr =$('<tr>').addClass('header'); 
     $.each(data.headers, function(i,header){ 
      $tr.append($('<th>').append($('a').addClass('sort').attr('href','#').append($('span').text(header)))); 
     }); 
     $tr.appendTo('table.data'); 
     $.each(data.rows,function(i,row){ 
      $('<tr>').attr('id',i). 
       append($('<td>').text(row.date)). 
       append($('<td>').text(row.company)). 
       append($('<td>').text(row.location)).appendTo('table.data'); 
     }); 
    } 
}); 
+1

¿Cuál es el beneficio de usar $ .each en lugar de ... en? Tenía la impresión de que $ .each es más costoso que para ... en. – Alex

+0

Tienes razón. No sabía eso. Podrías usar jQuery en lugar de crear cadenas, pero como tu pregunta es sobre el costo, supongo que tu código está bien ... http://jsperf.com/jquery-each-vs-for-loop/6 –