2010-05-22 80 views
3

说我有这个有没有更好的方法从表格行中获取值?

<table border="1" id="tbl"> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
<td>row 1, cell 1</td> 
<td>row 1, cell 2</td> 
</tr> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
<td>row 2, cell 1</td> 
<td>row 2, cell 2</td> 
</tr> 
</table> 

现在我想的是被选中的行,那么该单元格值检查行。所以我会这样做

var cells = $('#tbl :checked').parents('tr').children('td'); 

因此,让我们假设只有一个复选框可以检查(所以没有jQuery foreach循环)。

所以现在说我想获得第二个表格单元格的值我只想去

var secondCell = $(cells[1]).html(); 

事情与这虽然它使代码很脆。就像我在复选框之后放置另一个表格单元格一样?

<table border="1" id="tbl"> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td>row 1, cell 1</td> 
    <td>row 1, cell 2</td> 
</tr> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td>row 2, cell 1</td> 
    <td>row 2, cell 2</td> 
</tr> 
</table> 

所以现在我必须去通过我的代码,并再更改此

var secondCell = $(cells[1]).html(); 

这个

var thirdCell = $(cells[2]).html(); 

因为现在我的第三个单元格后,我其实并没有第二小区。

那么还有更好的方法吗?

感谢

回答

3

给这个td S的权益类名,这样就可以使用类名选择器中选择它们。

<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td class="cell1">row 1, cell 1</td> 
    <td class="cell2">row 1, cell 2</td> 
</tr> 

var row = $('#tbl :checked').parents('tr'); 
var cell1 = $('.cell1', row); 
var cell2 = $('.cell2', row); 

你可能也宁愿用text(),以获取其内容。 html()会返回任何包含的HTML,这可能不符合您的兴趣。

您是否考虑过使用<input type="radio">强制进行单个选择?如果你给他们所有相同的name,那么他们属于同一个单选组。

+0

我想的是类似的东西,但不知道该怎么办它。我想我会试试你的方式。雅我可能应该使用文本,但我追求一个隐藏的单元格字段,我设置所以没有意外应该发生。 – chobo2 2010-05-22 05:23:25

+0

你认为我有多大的速度差异吗?因为你基本上必须去检查那一行X次以获取值。 – chobo2 2010-05-22 19:05:03

0

我喜欢@BalusC的答案,并建议你使用它,但如果由于某种原因你不能这样做,为什么不使用全局常量?

var PRICE_ROW = 1; 
var AMOUNT_ROW = 2; 

$(cells[PRICE_ROW]).html(); 

另一种替代方法可能包括在使用前将行转换为名称为键的JavaScript对象。

+0

雅我在想你的方式和BalusC。你是什​​么意思将行转换为JavaScript对象?你是怎样做的? – chobo2 2010-05-22 05:22:12

+0

@ chobo2,只需写一个简单的JS函数convertRow($('#tbl:checked')。parents('tr')。children('td')) - > {name:“Bill Gates”,company: “微软”}“,每当你想用行来做某件事时就使用它。然后,无论你的表格如何变化,你只需要修复代码中的一个地方,剩下的就会使用普通的javascript对象。它也非常适合测试目的:) – vava 2010-05-22 09:52:19

+0

我仍然不明白。它如何转换行? – chobo2 2010-05-22 18:42:20

0

前几天我经历了同样的事情,我有一张表格,里面装满了我需要从单元格值中提取客户端评估的复选框。这是我想出来的。

// Find all the checked checkboxes in a table 
var CheckedCheckBoxes = $('#tbl').find("input[type='checkbox']:checked"); 

// Loop over all the checked checkboxes, and pull in the value from the 'td' item I select 
CheckedCheckBoxes.each(function() { 
    var cellValue = $(this).parent().parent().find('td:eq(2)').text(); 
} 

我敢肯定你需要家长()。父(),因为该复选框处于TD是在TR,你需要去的TR搜索的TD(细胞)你想要的。

0

回复您对BalusC的回答...

如果你是隐藏单元格需要额外的信息,然后用上面的脚本检索它。我认为使用自定义的data-属性(ref)将您需要的数据添加到输入本身会更高效。例如:

<table border="1" id="tbl"> 
<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" data-extra="some extra data stored here instead of in a hidden table cell" data-price="250" /></td> 
    <td> I am new </td> 
    <td>row 1, cell 1 (this cell is hidden)</td> 
    <td>row 1, cell 2 (this cell is hidden)</td> 
</tr> 
<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" data-extra="some extra data" data-price="300"/></td> 
    <td> I am new </td> 
    <td>row 2, cell 1 (this cell is hidden)</td> 
    <td>row 2, cell 2 (this cell is hidden)</td> 
</tr> 
</table> 

然后,你可以只使用这个脚本(因为你只说了一个复选框同时核对):

var cell = $('#tbl :checked').attr('data-extra'); 
+0

这不会使我的html失败w3c标准验证? – chobo2 2010-05-22 18:01:25

+0

是的,我不认为它会验证(但我不是100%确定)。您还可以将信息作为元数据添加到类属性中,然后使用jQuery.metadata插件(http://github.com/jquery/jquery-metadata) – Mottie 2010-05-22 22:35:32

相关问题