【问题标题】:how to convert/transform an HTML table tbody (with rowspans) TO json?如何将 HTML 表 tbody(带有行跨度)转换/转换为 json?
【发布时间】:2015-04-23 01:04:34
【问题描述】:

我有一个HTML表格,合并了行td,或者怎么说,我不知道如何表达自己(我不太擅长英语),所以我展示它!这是我的桌子:

<table border="1">
    <thead>
        <tr>
            <th>line</th>
            <th>value1</th>
            <th>value2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td rowspan="2">1</td>
            <td>1.1</td>
            <td>1.2</td>
        </tr>
        <tr>
            <td>1.3</td>
            <td>1.4</td>
        </tr>
        <tr>
            <td rowspan="2">2</td>
            <td>2.1</td>
            <td>2.2</td>
        </tr>
        <tr>
            <td>2.3</td>
            <td>2.4</td>
        </tr>
    </tbody>
</table>

(可以查看here

我想通过 jquery 或 javascript 将此表转换为 JSON 变量。 它应该是什么样子,我该怎么做?谢谢你,如果你能帮助我!

【问题讨论】:

    标签: javascript jquery json html-table


    【解决方案1】:

    如果你只想转换文本使用这个:

    var array = [];
    
    $('table').find('thead tr').each(function(){
        $(this).children('th').each(function(){
          array.push($(this).text());
        })
    }).end().find('tbody tr').each(function(){
        $(this).children('td').each(function(){
          array.push($(this).text());
        }) 
    })
    
    var json = JSON.stringify(array);
    

    【讨论】:

    【解决方案2】:

    以某种方式表示您的表格对我来说没有问题,但问题是如何将其解析回 HTML!这是一个带有前 6 个标签的 JSON:

    {"table":{"border":1,"thead":{"th":{"textContent":"line","tr":"textContent":"value1",...}}}}}...
    

    或者为了更好地理解:

    {"tag":"table","border":1,"child":{"tag":"thead","child":{"tag":"th","textContent":"line",
       "child":{"tag":"tr","textContent":"value1","child":...}}}}...
    

    包括结束标签。

    为了进一步解释,我需要知道您的表是字符串还是 DOM 的一部分。

    【讨论】:

      【解决方案3】:

      我相信这就是你想要的:

      var jsonTable = {};
      
      // add a new array property named: "columns"
      $('table').find('thead tr').each(function() {
          jsonTable.columns = $(this).find('th').text();
      };
      
      // now add a new array property which contains your rows: "rows"
      $('table').find('tbody tr').each(function() {
          var row = {};
      
          // add data by colum names derived from "tbody"
      
          for(var i = 0; i < jsonTable.columnsl.length; i++) {
              row[ col ] = $(this).find('td').eq( i ).text();
          }
      
          // push it all to the results..
      
          jsonTable.rows.push( row );
      };
      
      alert(JSON.stringify(jsonTable));
      

      我认为应该有一些更正,但我认为就是这样。

      【讨论】:

      • 我得到了这个例外:Unable to get property 'push' of undefined or null reference 这部分:jsonTable.rows.push(row);
      • 感谢帮助,但是有一些问题: 1:jsonTable.columns = $(this).find('th').text(); 这意味着它会找到所有的ths,并用它们创建一个大字符串; 2:jsonTable.columnsl.length; 将是大字符串的长度
      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2013-09-03
      • 2014-02-23
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多