【问题标题】:Turning these table outputs into div outputs将这些表格输出转换为 div 输出
【发布时间】:2017-01-10 21:33:14
【问题描述】:

最近我在这里寻求有关 javascript 的帮助。我需要能够解析 CSV 文件并将其输出到 HTML 的东西。

有人能够大力帮助我。唯一的问题是它输出为单行表。在 CSV 文件中,每一行没有特定数量的列/数据,这意味着行数据的长度不同。

我一直在尝试做的是编写一些 if 语句,只选择“姓氏”或“已知”之类的内容,这样我就可以对结果进行排序。

最好的方法是什么?我需要设置输出数据的样式,所以我认为 div id 会比表格更好。另外,我应该在哪里编辑代码(我的 javascript 知识非常初学者)。

如果我尝试过的语句(可能完全错误):

  function firstName($container){
      var firstN = $container;
      var n = firstN.includes("First Name");

    if (n != 0){
        document.getElementById("first_name").innerHTML="First name = ";
        return;
    }
    }

主要代码块(CSV 文件可在http://www.fooda.website/testResults.csv 找到):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery-1.12.3.min.js" type="text/javascript">
</script>
<title>Untitled Document</title>
<script type="text/javascript">
// ============================
// Allow for a cached result
// ============================
var csvRows = [];
// ============================

// ============================
// Given an array of rows build a table.
// ============================
function buildTable(csvRows){
  // Our base result
  var $table = $("<table cellpadding=\"2\" cellspacing=\"0\"></table>");

  // ============================
  // For each row in the CSV build a <tr /> and append it to the <table />
  // ============================
  $table = csvRows.reduce(function($table, csvRow){

    // For this demo just take the first few cells/columns
    var csvRowCells = csvRow.split(",");

    // Our base table row
    var $tr = $("<tr>/tr>");

    // ============================
    // For each cell row build a <td /> and append it to the <tr />
    // ============================
    $tr = csvRowCells.reduce(function($tr, csvRowCell){
      return $tr.append($("<td>/</td>").text(csvRowCell));
    }, $tr);
    // ============================

    // Add our new <tr /> to the table then return the table
    return $table.append($tr);
  }, $table);
  // ============================

  return $table;
}
// ============================

// ============================
// Given an array of rows, randomly select one (as an array) and build a table with it.
// ============================
function fillContainerWithTable(csvRows, $container){
  var randomRow = [csvRows[Math.floor(Math.random() * csvRows.length)]];
  var $table = buildTable(randomRow);
  $container.append($table);
}
// ============================

// ============================
// the click handler
// ============================
function myFunction(){
  // some random csv I found...
  var uri = "http://www.fooda.website/testResults.csv";
  var $container = $("#wrap");

  // You probably want a clean slate.
  $container.empty();

  // ============================
  // If we have the data locally already just use it.
  // ============================
  if (csvRows.length !== 0){
    console.log("using local data...");
    fillContainerWithTable(csvRows, $container);
    return;
  }
  // ============================

  console.log("fetching remote data...");

  $.get(uri, function(data){
    csvRows = data.split("\n");
    fillContainerWithTable(csvRows, $container);
  });
}
// ============================
</script>
<style type="text/css">
body {
  font-family: arial, helvetica, sans-serif;
  font-weight: normal;
  font-size: 13px;
  color: #000;
  text-align: left;
  margin: 3px 0px;
}

#wrap {
  padding: 20px;
}

#wrap table {
  border: solid 1px;
  border-collapse: collapse;
  background-color: aliceblue;
  height:400px;
  width:100%;
}

#first_name {
    height:200px;
    width:200px;
    background-color:#0C0;
}

</style>
</head>



<body>


<button onclick="myFunction()">Click me</button>
<div id="wrap"></div>

<div id="first_name">
</div><!--first_name-->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


</body>
</html>

提前致谢!

【问题讨论】:

  • 看起来你的“CSV”实际上是 JSON,对吗?
  • @henry:我也有同样的想法,但更像是每一行都是一个 JSON 对象。但你是对的,“CSV”在这种情况下失去了所有意义。 gezer4000:你能控制“CSV”格式吗?如果将数据转换为真正的 JSON,处理起来会容易得多。如果您设置为 CSV,则应考虑执行更类似于 CSV 的布局,其中每列代表特定类型的值,即使该列为空。
  • @TheJim01 包含的文件只是结果示例。实际文件是 CSV,大约有 700 个条目。我对 javascript 非常陌生,之前只涉足过,所以我不确定什么/如何解析 JSON。我正在寻找一种方法来获取 CSV 行中的每个条目并在 HTML 中输出它,并使用一些代码来过滤结果,以便只显示某些值。
  • 这里的错字 - var $tr = $("/tr>");... 应该是 var $tr = $(" ");

标签: javascript jquery html css csv


【解决方案1】:

简短的回答是“这是关于 SO 的许多‘我如何将 JSON 转换为 HTML 表格’问题的副本”,最后我将向您指出其中的一些问题,但我想引导您完成它。

CVS(逗号分隔值)看起来像

Col1,Col2,Col3,Col4
row1value1,row1value2,row1value3
row2value1,row2value2
row3value1,,row3value3,row3value4

虽然不是必要这种情况,但您可以将 CSV 视为一种非常紧凑的纯文本方式来编写表格,其中每一行的值顺序相同(如表格列)并且为空单元格看起来像“,”。如果上面的 csv 是一个表格(例如,如果您将其导入 Excel 等),它将是

Col1       Col2       Col3       Col4
row1value1 row1value2 row1value3
row2value1 row2value2
row3value1            row3value3 row3value4

另一方面,您的数据实际上是 JSON“对象”列表,每行一个。在 JSON 中,object 包含在 { } 中,由“键/值”对组成。 JSON 对象看起来像

{"key1":"value1", "key2":"value2"}

JSON 允许您将对象分组到 数组。 JSON 数组包含在 [ ] 中。

在 JSON 中,上表如下所示

[{'Col1':'row1value1','Col2':'row1value2','Col3':'row1value3'},
 {'Col1':'row1value1','Col2':'row1value2'},
 {'Col1':'row1value1','Col3':'row1value3','Col4':'row1value4'}]

使用 JSON 时,您可以说“循环遍历数组中的每个对象”和“对于当前对象,给我Col2 值”。 (注意这意味着相关的 JSON 对象不必以相同的顺序列出键/值对,并且您不必指定缺失值。)如果您知道数组中的每个可能键(在这种情况下, 'd 是 Col1、Col2、Col3 和 Col4)你可以说

"遍历数组,将每个对象放入&lt;tr&gt;,并为每个 对象首先将 Col1 值放入 &lt;td&gt;,然后将 Col2 值放入 在&lt;td&gt; 中,然后将 Col3 值放入 &lt;td&gt;,然后将 Col4 &lt;td&gt; 中的值。”

这正是您想要做的……事实证明,已经有很多工具可以做到这一点!唯一阻碍您使用它们的就是在文件的开头放置一个[,在除最后一行之外的每一行的末尾放置一个,,在文件的末尾放置一个]。如果你能做到这一点,你很幸运。如果这是静态数据,只需在文本编辑器中打开数据并使用查找/替换来添加行尾逗号。如果它是动态生成的,您将不得不想出一种添加内容的方法(解决方案将类似于添加[,将文件拆分为},添加拆分数据的每个块然后是,,除非它是最后一个块,然后添加],然后通过 JSON-to-HTML-table 工具运行)。我将把如何做这件事留给你——如果你被难住了,肯定会打开一个新的“我如何将 json 对象列表转换为 json 数组”的问题。我不是 JSON 专家,我敢打赌有一些标准的做法

这里有几个很有前途的 JSON-to-HTML-table 解决方案。我很想知道其中一个是否适合您!

【讨论】:

  • 感谢@henry 的回复所以你是说我应该将文件转换为JSON?这怎么可能?您还建议使用哪种工具?再说一次,我对此很陌生。
  • 我是说您实际上并没有通常使用的 CSV。您几乎拥有一个 JSON 文件,只是在每行末尾缺少逗号和整个内容的括号。如果您可以添加这些,您将能够使用许多现有的 JSON-to-HTML-table 工具中的任何一种!我已经重写了我的评论,以将其变成更真实的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 2017-04-02
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多