【问题标题】:Javascript table using data from multiple txt files and displaying on html file使用来自多个 txt 文件的数据并显示在 html 文件上的 Javascript 表
【发布时间】:2021-02-06 01:00:21
【问题描述】:

我开发了一个代码来读取用户评分数据(从多个 txt 文件中说两个以上的 txt 文件)并将它们显示在表格中。我无法正确显示表格和数据,到目前为止,我一次只能访问一个 txt 文件。有关修复表格布局(添加另一个表格以显示其外观)和表格中的数据排列的任何建议。下面是我的示例 txt 数据文件,名为 sample1.txt 和 sample2.txt,然后在其中使用 javascript 完成 html 代码。

sample1.txt

 user1  100
 user2  80
 user3  60
 user4  75
 user5  100
 user6  80
 user7  60
 user8  75
 user9  12
 user10 13

sample2.txt

 user1  10
 user2  20
 user3  30
 user4  45
 user5  50
 user6  60
 user7  70
 user8  80
 user9  90
 user10 99

tableExample4.html

  <!DOCTYPE html>
  <html>
  <head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <meta content="utf-8" http-equiv="encoding">
  <title>Read Text File</title> 
  </head> 

  <body> 
  <input type="file" name="inputfile"
        id="inputfile"> 
  <br> 

  <pre id="output"></pre> 
  <script>

  var file = document.getElementById('inputfile');

  file.addEventListener('change', () => {
  var txtArr = [];
  var fr = new FileReader();
  fr.onload = function() {
    // By lines
    var lines = this.result.split('\n');
    for (var line = 0; line < lines.length; line++) {
        txtArr = [...txtArr, ...(lines[line].split(" "))];
    }
   }

   fr.onloadend = function() {
    //console.log(txtArr);
   // document.getElementById('output').textContent=txtArr.join("");
   // document.getElementById("output").innerHTML = txtArr; 
   // console.log(txtArr[1]);
   
   // *********************  table 1 code test ****************************************

    var table= document.createElement('table'),
        thead = document.createElement('thead'),
        tbody = document.createElement('tbody'),
        th,
        tr,
        td;
        th = document.createElement('th'),          
        th.innerHTML="Name";
        table.appendChild(th);
        th = document.createElement('th'); 
        th.innerHTML= "Sample1";
        table.appendChild(th);
        th = document.createElement('th'); 
        th.innerHTML= "Sample2"
        table.appendChild(th);
        table.appendChild(thead);            
        table.appendChild(tbody);
        
        document.body.appendChild(table);
     for(var i=0;i<txtArr.length;i++){
        tr = document.createElement('tr'),
        //for Name
        td= document.createElement('td');
        td.innerHTML=txtArr[i];
        tr.appendChild(td);

        //for Samples
        td = document.createElement('td');
        td.innerHTML=txtArr[i];
        tr.appendChild(td);
          tbody.appendChild(tr);
     }
   // ******************  end of test code *************************************


    }

    fr.readAsText(file.files[0]);


    })
    // *********************  table 2 code test ****************************************
   function generate_table() {
   // get the reference for the body
   var body = document.getElementsByTagName("body")[0];

   // creates a <table> element and a <tbody> element
   var tbl = document.createElement("table");
   var tblBody = document.createElement("tbody");

   // creating all cells
   for (var i = 0; i < 2; i++) {
   // creates a table row
   var row = document.createElement("tr");

   for (var j = 0; j < 2; j++) {
   // Create a <td> element and a text node, make the text
   // node the contents of the <td>, and put the <td> at
   // the end of the table row
   var cell = document.createElement("td");
   var cellText = document.createTextNode("cell in row "+i+", column ");
   cell.appendChild(cellText);
   row.appendChild(cell);
   }

   // add the row to the end of the table body
  tblBody.appendChild(row);
  } 

  // put the <tbody> in the <table>
  tbl.appendChild(tblBody);
  // appends <table> into <body>
  body.appendChild(tbl);
  // sets the border attribute of tbl to 2;
  tbl.setAttribute("border", "2");

  }


  // ******************  end of test code ******************************************

  </script>

  <input type="button" value="Generate a table." onclick="generate_table()">

  </body>
  </html> 

【问题讨论】:

    标签: javascript arrays text file-io datatable


    【解决方案1】:

    我没有添加表头,输入文件需要在第一个字段之前没有空格,并且在第一个和第二个字段之间只有一个空格,如下所示。

    选择一个文件,然后选择下一个,然后当所有选定的使用创建。这将绘制表格并擦除数据数组以进行新选择。

    Sample1.txt

    user1 100
    user2 80
    user3 60
    user4 75
    user5 100
    user6 80
    user7 60
    user8 75
    user9 12
    user10 13
    

    Sample2.txt

    user1 10
    user2 20
    user3 30
    user4 45
    user5 50
    user6 60
    user7 70
    user8 80
    user9 90
    user10 99
    

    新建脚本如下

    var file = document.getElementById('inputfile');
    
    var txtArr = [];
    
    file.addEventListener('change', () => {
    
      var fr = new FileReader();
      fr.onload = function() {
        // By lines
        var lines = this.result.split('\n');
        for (var line = 0; line < lines.length; line++) {
            txtArr.push(lines[line].split(" "));
        }
       }
    fr.readAsText(file.files[0]);
    });
        
    function generate_table() {
       if ( typeof(document.getElementsByTagName("table")[0]) !="undefined" ) {
        document.getElementsByTagName("table")[0].remove();
       }
       // get the reference for the body
       var body = document.getElementsByTagName("body")[0];
        
       // creates a <table> element and a <tbody> element
       var tbl = document.createElement("table");
       var tblBody = document.createElement("tbody");
       
        // creating all cells
        for (var i = 0; i < txtArr.length; i++) {
           // creates a table row
           var row = document.createElement("tr");
               for (var j = 0; j < 2; j++) {
                    var cell = document.createElement("td");
                    var cellText = document.createTextNode(txtArr[i][j]);
                    cell.appendChild(cellText);
                    row.appendChild(cell);
                    tblBody.appendChild(row);
         } 
          
         // put the <tbody> in the <table>
         tbl.appendChild(tblBody);
         // appends <table> into <body>
         body.appendChild(tbl);
         // sets the border attribute of tbl to 2;
         tbl.setAttribute("border", "2");
         
        }
        txtArr=[];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 2016-02-25
      • 2020-05-28
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多