jQuery - Parser specific table by filter(), map() function

之前在parser網頁內的特定table時,總是撰寫了一堆code,先針對table,再針對tr的部分,再

來是td的欄位,如此一來需撰寫兩層迴圈來跑。而現在雖然可以透過map function,不過如果

要先找到特定table的話,可以先使用filter function來找到這個table的object。

下面有一個例子如下:
<table border=1 width="200">
 <tr data="1-1">
  <td>1</td>
  <td>2</td>
  <td>
   <table border=1 width="300">
    <tr data="1-1-1">
     <td>13</td>
     <td>14</td>
     <td>15</td>
    </tr>
    <tr data="1-1-2">
     <td>16</td>
     <td>17</td>
     <td>18</td>
    </tr>
   </table>
  </td>
 </tr>
 <tr data="1-2">
  <td>4</td>
  <td>5</td>
  <td>6</td>
 </tr>
</table>

如果我們要針對table內的table擷取其內td的資料,此時我們可以透過先針對body內所有的

table做filter,並且針對filter做一些過濾的設定,如那個table的width = 300,因此針對此一特

性,當找到該table時,回傳該table的object。

var tdtext = new Array();
var selectedobj = $('table').filter(function(){
 if($(this).attr('width') == 300){
  return $(this);
 }
});
var tableData = selectedobj.map(function(i, e){
    tdtext = new Array();
    $(e).find('td').each(function(){
     tdtext.push($(this).text());
    });
    return tdtext;
}).get();

console.log(tableData);
當取得了該table的object之後,就可以使用map function與find來取出其內td所有的值!最後

得到的結果如下:

["13", "14", "15", "16", "17", "18"]  

留言