2016-11-28 46 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

請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

+0

你只是試圖創建一個參考數組來輕鬆訪問元素,然後傳遞到你的邏輯? – Turk

回答

0

嗯,我設法弄清楚我自己的一種方式。看起來像.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/