2012-02-18 8 views
0

編集可能なテーブルを使用してJQuery内に次のJSONを作成しようとしていますが、見出し、搭乗ゾーン(列)の数、ルートのシリアル(行)のすべての時間が変更されるので、私は手動でデータを引き出し、行ごとにJSONを構築する必要があります。ご意見やご返信ありがとうございます。テーブルは次のように表示されてテーブルからJQueryを使用してJSONを作成する

{ "name": txtRouteName.val(), 
    "serial": [ 
    { "rsn": "X100", "boardingzone": [ 
     { "name": "Foo", "time": "8:00" }, 
     { "name": "Bar", "time": "8:15"} 
    ] }, 
    { "rsn": "X101", "boardingzone": [ 
     { "name": "Foo", "time": "9:00" }, 
     { "name": "Bar", "time": "9:15"} 
    ] } 
    ] 
};  

<table id="table1"> 
    <tr> 
    <td>RSN</td> 
     <td>Foo</td> 
     <td>Bar</td> 
    </tr>       
    <tr> 
     <td>X100</td> 
     <td>8:00</td> 
     <td>8:15</td> 
    </tr> 
    <tr> 
     <td>X101</td> 
     <td>9:00</td> 
     <td>9:15</td> 
    </tr> 
</table> 

答えて

1

まず第一に、私はあなたがあなたのテーブルの見出しにthを使用することをお勧め:

<table id="table1"> 

    <tr> 
     <th>RSN</th> 
     <th>Foo</th> 
     <th>Bar</th> 
    </tr> 

次に、あなたができます

function parseTable(table) { 
    // Helper function to extract the text content of a cell 
    function getText(i, cell) { return $(cell).text().trim() }; 

    // Get the text of the headings as an array 
    var headings = $(table).find('tr:eq(0)').find('th').map(getText); 

    // Get the text of the values as an array of arrays (values in rows) 
    var values = $(table).find('tr:gt(0)').map(function(i, row) { 
     return $(row).find('td').map(getText); 
    }); 

    // Map the data according to these rules: 
    // One object per row, with `boardingzone` keeping an array of the values 
    var result = $.map(values, function(row) { 
     var obj = {}; 
     obj[headings[0]] = row[0]; 
     obj.boardingzone = $.map(row.slice(1), function(value, i) { 
      return { 
       name: headings[i + 1], 
       time: value 
      } 
     }); 
     return obj; 
    }); 

    return result; 
} 
console.log(JSON.stringify(parseTable("#table1"))); 
+0

あなたの提案とコメントありがとうございました。私はで編集可能な列を作成しましたが、いくつかのランダムな理由のために私の見出し列はドロップダウンリスト値変更。そのために私はを​​に変更しました。 – Fy2C

+0

それでは、 'var headings = $(table).find( 'tr:eq(0)')の行で' th'を 'td'に変更してくださいfind( 'th')。map(getText);' –

1

反復行とセルは:あなたが最初の行にある場合

$("#table1 tr").each(function(){ 
     //Rows action 
     $(this).children("td").each(function(){ 
     //Cells action 
     }); 
}); 

その後、フィールド名があります。あなたが行の最初のセルにいる場合、あなたはrsvを読んでいます。そうでなければ、あなたは搭乗ゾーンを読んでいます。

+0

私はそのことを考えたが、私は本当に私のRSNを拡張する方法がわかりませんシリアル配列の搭乗ゾーン配列を持つシリアル配列に – Fy2C

関連する問題