我需要从html表中提取数据以创建JSON数组。

这是HTML表格的结构,

    <table class="tableClass">
        <thead class="tableHeaderClass" >
           <tr>
              <th>header_column1</th>
              <th>header_column2</th>
              <th>header_column3</th>
           </tr>
        </thead>
        <tbody class="tableBodyClass">
           <tr>
              <td>row1_column1</td>
              <td>row1_column2</td>
              <td>row1_column3</td>
           </tr>
           <tr>
             <td>row2_column1</td>
             <td>row2_column2</td>
             <td>row2_column3</td>
           </tr>
         </tbody>
    </table>


在我的JavaScript函数中,我正在这样做

  function() {

    var json = {
        header_column1 : '',
        header_column2 : '',
        header_column3 : ''
    };

    var data = [];
    $('tableClass').find('tbody').children('tr').each(function() {
         var $tds = $(this).find('td');
         json.header_column1 = $tds.eq(0).text();
         json.header_column2 = $tds.eq(1).text();
         json.header_column3 = $tds.eq(2).text();

         data.push(json);
    });

    return data;

 }


当我打印数组时,我只得到“ row2_column1,row2_column2,row2_column3”。

无法锻炼我在做错/错过的事情。如果您能帮我解决这个问题,那就太好了。

最佳答案

您使用了错误的选择器,$('tableClass')将尝试选择一个名称为tableClass的元素,即:<tableClass></tableClass>
您可以改用以下方法:

$('.tableClass tbody tr')


另外,由于您使用的是对象,因此数组中的每个元素都将引用同一对象

//Clones the json object, might not be the most efficient method
var newHeader = JSON.stringify(JSON.parse(json));
//Or just create a new object each iteration
var newHeader = {};
newHeader.header_column1 = $tds.eq(0).text();
newHeader.header_column2 = $tds.eq(1).text();
newHeader.header_column3 = $tds.eq(2).text();

data.push(newHeader);


有关对象克隆,请参见this question

09-08 03:13