【问题标题】:Parsing multiple HTML tables into a multidimensional array将多个 HTML 表解析为多维数组
【发布时间】:2016-11-28 23:49:30
【问题描述】:

我已经搜索并无法找到将多个 HTML 表解析为多维数组的最佳方法。基本上我有这个 HTML:

<table>
  <tr>
    <td> T1 Row 1 Col 1</td>
    <td> T1 Row 1 Col 2</td>
    <td> T1 Row 1 Col 3</td>
  </tr>
  <tr>
    <td> T1 Row 2 Col 1</td>
    <td> T1 Row 2 Col 2</td>
    <td> T1 Row 2 Col 3</td>
  </tr>
</table>

<table>
  <tr>
    <td> T2 Row 1 Col 1</td>
    <td> T2 Row 1 Col 2</td>
    <td> T2 Row 1 Col 3</td>
    <td> T2 Row 1 Col 4</td>
  </tr>
  <tr>
    <td> T2 Row 2 Col 1</td>
    <td> T2 Row 2 Col 2</td>
    <td> T2 Row 2 Col 3</td>
    <td> T2 Row 2 Col 4</td>
  </tr>
</table>

我想自动将其转换为多维数组,而:

$pageTables array would return a length of 2 (tables)
$pageTables[1] would return a length of 2 (rows)
$pageTables[1][0] would return a length of 4 (columns)
$pageTables[0][1][2] would return a value of " T1 Row 2 Col 3"

这将运行的页面可以有任意数量的表,并且这些表可以有不同的列数。我稍后将应用的用于格式化表格的逻辑将取决于列数。

我知道这可能很容易,但我一辈子都无法让它发挥作用。

这是我迄今为止想出的,但当然行不通:

var data = Array();

    $("table").each(function(i, v){
        data[i] = Array();
        $(this).children('tr').each(function(ii, vv){
            data[i][ii] = Array();
                $(this).children('td').each(function(iii, vvv){
                    data[i][ii][iii] = $(this).text();
                }); 
        });    
   })`

【问题讨论】:

  • 没有自动......它必须被编码......展示你迄今为止的最佳尝试。另外,你为什么认为你需要一个数组?您很有可能已经拥有了表格本身所需要的东西。
  • 请阅读How to Ask。关键词:“搜索和研究”和“解释......任何阻碍你自己解决的困难”。
  • 您是否只是想创建一个引用数组以轻松访问元素然后传递给您的逻辑?

标签: jquery multidimensional-array


【解决方案1】:

好吧,我自己想出了一个办法。看起来 .find 而不是 .Children 有所帮助。

var $data = Array();

$("table").each(function(i, v){
  $data[i] = Array();
  $(this).find('tr').each(function(ii, vv){
    $data[i][ii] = Array();
    $(this).find('td').each(function(iii, vvv){
      $data[i][ii][iii] = $(this).text();
      console.log("Table "+ (i+1) +", Row "+ (ii+1) +", Cell "+ (iii+1) +": " + $data[i][ii][iii]);
    }); 
  }); 
})

测试以上似乎有效:

console.log("Number of tables: " + $data.length);
console.log("Number of rows in Table 1: " + $data[0].length);
console.log("Number of rows in Table 2: " + $data[1].length);
console.log("Number of cells/cols in Table 1 Row 1: " + $data[0][0].length);
console.log("Number of cells/cols in Table 2 Row 1: " + $data[1][0].length);
console.log($data[0][1][2]);

我确信有更好的方法可以做到这一点,所以请随时恭敬地发表评论。

https://jsfiddle.net/pdowden/m6fhmcbs/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2019-11-17
    • 1970-01-01
    • 2012-09-02
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多