我有一个数据表,我想从中获取文本,插入数组(然后与Google地图一起使用)。
表格如下:
<table>
<thead>
<tr>
<th>One</th>
<th>Two</th>
</tr>
</thead>
<tr class='bar'>
<td class='name'>Bob</td>
<td class='number'>12345</td>
</tr>
<tr class='bar'>
<td class='name'>Jane</td>
<td class='number'>-55.34</td>
</tr>
</table>
我想从表格单元格中获取文本并构建一个数组。类似的东西:
var foo = [
['Bob', 12345],
['Jane', -55.34]
]
我尝试使用jquery,是:
var foo = [];
$('.bar').each(function(){
foo.push($('.name').text(), $('.number').text());
});
但是,显然,这不起作用(我很确定我只是以错误的方式使用选择器):
["BobJane", 12345-55.34]
那么如何从每个TR中的每个TD获取内容并使用它构建数组,以便获得上面所需的示例(每个数据集都在其自己的行中)?
答案 0 :(得分:3)
你可以using .map()
来构造值的jQuery对象and .get()
以将数组拉出来。
试试这个:
var array = $('.bar').map(function() {
var $ch = $(this).children('td');
return [ [ $.text( [$ch[0]] ), $.text( [$ch[1]] ) ] ];
}).get();
请注意,在.map()
内返回数组时,需要将其包装在另一个数组中。
答案 1 :(得分:2)
你快到了:
var foo = [];
$('.bar').each(function(){
var self = $(this);
foo.push([self.children('.name').text(), self.children('.number').text()]);
});
您之前已将两个新值推送到foo
数组。上面的代码推送一个值(这是一个包含两个元素的数组)。您还需要在当前表格行中搜索正确的name
和number
,您可以使用children
进行搜索。
如果它有助于您理解,上述代码可以分解为:
var foo = [];
$('.bar').each(function(){
var self = $(this);
var row = [self.children('.name').text(), self.children('.number').text()];
foo.push(row);
});
答案 2 :(得分:1)
将this
作为上下文传递给each
内的选择器,以便一次只获得一个名称/号码。另外,请确保将数组[]
传递给push
函数,而不是两个条目。
var foo = [];
$('.bar').each(function () {
var name = $('.name' , this).text(); // name from the current .bar
var number = $('.number', this).text(); // number from the current .bar
foo.push( [ name, number ] ); // notice []
});