简体   繁体   English

关闭JSON数据填充表

[英]Closing json data populated table

I'm trying to delete the existing table in a div and create a new one each time the page receive json encode data. 我试图在div中删除现有表,并在每次页面接收json编码数据时创建一个新表。

I have problems closing the table? 我在关闭桌子时遇到问题吗?

html: 的HTML:

<div id="tblContent"></div>

jQ: jQ:

var um_getallusers='<table class="table-hover" id="um"><thead><tr><th class="col-md-1">ID</th><th class="col-md-4">Name</th><th class="col-md-4">username</th><th class="col-md-3"></th></tr></thead><tbody>'; 
    $.getJSON('php/um_getallusers.php',function(dta){
      $("#tblContent").remove(); //del table
      $.each(dta,function(index,item){
        um_getallusers+='<tr><td>'+item.id+'</td><td>'+item.name+'</td><td>'+item.username+'</td></tr>';
      });
      var um_getallusers='</tbody></table></table>'; // this is my problem

      $('#um').html(um_getallusers);
    });

You're re-declaring the variable um_getallusers after you're already using it, plus you're resetting the value (by using um_getallusers='</tbody></table></table>'; instead of um_getallusers+='</tbody></table></table>'; . 您已经在使用变量um_getallusers之后重新声明它,并且您正在重置值(通过使用um_getallusers='</tbody></table></table>';而不是um_getallusers+='</tbody></table></table>';

var um_getallusers='<table class="table-hover" id="um"><thead><tr><th class="col-md-1">ID</th><th class="col-md-4">Name</th><th class="col-md-4">username</th><th class="col-md-3"></th></tr></thead><tbody>'; 
    $.getJSON('php/um_getallusers.php',function(dta){
      $("#tblContent").remove(); //del table
      $.each(dta,function(index,item){
        um_getallusers+='<tr><td>'+item.id+'</td><td>'+item.name+'</td><td>'+item.username+'</td></tr>';
      });
      um_getallusers+='</tbody></table></table>'; // this is my problem

      $('#um').html(um_getallusers);
    });

So, delete the extra var and add in a + 因此,删除多余的var并添加+

I suggest you to use a template for the rows, and for the tables if you require to. 我建议您根据需要为行和表使用模板。 If you use several calls to the append method or too much string concatenation, watch out, this is spaghetti code and later the maintenance when the tables get bigger is a nightmare. 如果您使用几次对append方法的调用或过多的字符串连接,请当心,这是意大利面条代码,后来当表变大时进行维护是一场噩梦。 The templates makes cleaner your HTML and Javascript. 模板使您的HTML和Javascript更加整洁。

The coolest way to do this would be with the new template tag: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template 最酷的方法是使用新的模板标签: https : //developer.mozilla.org/en-US/docs/Web/HTML/Element/template

<template>

But right now is "only" supported by all browsers but...IE https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#Browser_compatibility 但是目前所有浏览器都“仅”支持,但... IE https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/template#Browser_compatibility

You can use several js libraries for templating like: 您可以使用多个js库进行模板制作,例如:

Big and popular frameworks use these libraries (or similar techniques) like Ember.js, Angular.js, Backbone and others. 大型且流行的框架使用这些库(或类似技术),例如Ember.js,Angular.js,Backbone等。

This is an example with my favorite library for templating, Ractivejs, in a JSfiddle: http://jsfiddle.net/Katio/3usbro20/ 这是我最喜欢的用于在JSfiddle中进行模板化的库Ractivejs的示例: http : //jsfiddle.net/Katio/3usbro20/

And in a Stackoverflow snippet: 在Stackoverflow片段中:

  var Section = Ractive.extend({ el: 'container', template: '#table-template', data: {rows : [ {id : 1, name: "John", username: "Jony41"}, {id : 2, name: "Paul", username: "Pmac44"}, {id : 3, name: "George", username: "Harris44"}, {id : 4, name: "Ringo", username: "Star43"} ] } }); var rSection = new Section({ }) $("#button1").on("click", function(){ rSection.set( "rows", [ {id : 6, name: "Garry", username: "Kimo63"}, {id : 7, name: "Anatoly", username: "Karpy51"}, {id : 8, name: "Robert", username: "Bob42"}, {id : 9, name: "Mihail", username: "Boty12"} ] ) }) 
 <script src="https://rawgit.com/katio/FilesForFiddle/master/ractivejs/0.5.5/ractive20140828.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="x-template" id="table-template"> <table> <thead> <tr> <th> ID </th> <th> NAME </th> <th> USER NAME</th> </tr> </thead> <tbody> {{#rows}} <tr> <td> {{id}} </td> <td> {{name}} </td> <td> {{username}}</td> </tr> {{/rows}} </tbody> <tbody> </tbody> </table> <input type="button" value = "Load JSON and update only the rows" id="button1"> </script> <div id="container"></div> 

Why not leave the table and its thead in place and just replace the contents of the tbody? 为什么不把桌子和它的桌子留在原处,而只是更换床身上的东西呢?

First make sure that the table, its thead and tbody are in place in the DOM, then : 首先,请确保该表及其主题和正文在DOM中都位于适当的位置,然后:

$.getJSON('php/um_getallusers.php',function(dta) {
    var $tbody = $("#um tbody").empty();
    $.each(dta, function(index, item) {
        $tr = $("<tr/>").appendTo($tbody);
        $('<td/>').text(item.id).appendTo($tr);
        $('<td/>').text(item.name).appendTo($tr);
        $('<td/>').text(item.username).appendTo($tr);
    });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM