2010-04-10 53 views
1

使用jquery我需要从表格单元格中检索数组,格式化数据并将其传递给js函数。从表格单元格中获取值并将其转换为数组

我使用的代码是这样的:

var l1 = new Array(); 
    $('table#datatable tbody td:first-child').each(function() { 
    l1.push($(this).text()); 
    }); 

这是表片段

<tr> 
       <th scope="row">Age: 0-4</th> 
       <td>0</td> 
       <td>9.7</td> 
      </tr> 
      <tr> 
       <th scope="row">5-17</th> 
       <td>23.6</td> 
       <td>18.0</td> 
      </tr> 
      <tr> 
       <th scope="row">Total 0-17</th> 
       <td>20.6</td> 
       <td>16.1</td> 
      </tr> 

表的ID是 “数据表”。我想返回的每首个TD的内容数组,然后格式化它是这样的: 0,23.6,20.6

我很新的使用数组...

回答

1

你可以这样做:

var l1 = $('#datatable td:nth-child(2)').map(function() { 
    return $(this).text(); 
}).get(); 
//l1 = [0, 23.6, 20.6] 

See here for a demo

这使用.map()摆脱元素的数组。你的主要问题是:first-child需要是父母的第一个孩子,它并不意味着“这种类型的第一个孩子”,所以在你的代码中只有<th>将是:first-child。相反,你需要第二个孩子,或:nth-child(2)获得第一个<td>元素。

+0

DOH,我没有意识到,TH算作集的一部分。这工作非常好,谢谢。我正在尝试为jqPlot创建一个将表格转换为图表的插件。 – liz 2010-04-10 18:02:40

+0

@liz - 我以为我认识到这个标记,很高兴这成功了你。对问题进行+1,完全按照它的要求进行提问:包括您尝试的结果和预期结果,标记/代码是一个巨大的优势,使问题更容易回答。 – 2010-04-10 18:05:26

+0

感谢:-)慢慢学习... – liz 2010-04-10 18:19:40

1

这应该工作:

var values = []; 
$('#datatable tbody tr').each(function() { 
    values.push($('td:first', this).text()); 
}); 
console.log(values); 

说明:

  • 1行:创建values变量并将其设置为空数组。
  • 第2行:每tr#datatable中循环。
  • 第3行:将tr中第一个td的文本添加到values阵列。
  • values现在已填充值。
+0

这将为所有'td'元素添加文本,而不仅仅是第一个元素。 – interjay 2010-04-10 17:48:15

+1

不,它不会 - '.text()'会自动获取第一个元素。 – moff 2010-04-10 17:48:56

+0

这就是* not * correct,你的结果是:'[“09.7”,“23.618.0”,“20.616.1”]'...请看你自己:http://jsfiddle.net/EUUjP/阅读'.text()'的描述:http://api.jquery.com/text/“获取匹配元素集合中每个元素的**组合文本**内容,包括它们的后代。” – 2010-04-10 17:50:57

1

td:first-child将不会匹配任何内容,因为<td>元素都不是第一个孩子(它们前面有<th>)。相反,请使用td:nth-child(2)

相关问题