2016-11-28 5 views
0

複数のHTMLテーブルを解析して多次元配列にする最良の方法を見つけられませんでした。基本的に私はこの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(); 
       }); 
     });  
    })` 
+1

自動的一切ありません....それは、これまでにあなたの最高の試みを表示...コード化する必要があります。また、なぜ配列が必要だと思いますか?テーブル自体に必要なものがすでにあるかもしれません。 –

+1

[ask]をお読みください。重要なフレーズ:「検索と研究」と「あなたがそれを自分で解決することを妨げた困難を説明する」 –

+0

簡単に要素にアクセスしてロジックに渡すための参照配列を作成しようとしていますか? – Turk

答えて

0

まあ、私は自分の道を見つけ出すことができました。 .Childrenが助けたのではなく、.findのように見えます。

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/