我正在寻找一种方法,使用jQuery在普通的HTML表格中执行以下操作。
这是我到目前为止所做的:
$("#frame td").click(function(e) {
var RowSelected = $(this).parent().parent().children().index($(this).parent());
var CellSelected = e.target.cellIndex;
$(this).toggleClass("selected", this.clicked);
$("#cells").append("R" + RowSelected + "C" + CellSelected + ", ");
});
答案 0 :(得分:4)
DOM为您提供rowIndex
以及cellIndex
,不需要疯狂的jQuery index
工作。
此外,如果您推迟生成选定单元格列表直到提交时间,则无需通过在单击时添加和删除元素来尝试跟踪它们:
$('#frame td').click(function() {
$(this).toggleClass('selected');
});
$('#someform').submit(function() {
$('#cells').val(
$('#frame td.selected').map(function() {
return 'R'+this.parentNode.rowIndex+'C'+this.cellIndex;
}).get().join(', ')
);
});
假设#cells
是您用来传递信息的隐藏输入。
答案 1 :(得分:1)
你可以通过尝试计算行等来实现这一点,但我喜欢的一种方法当我以编程方式编写我的表格时是在我写出来时为每个单元格添加类这样每个单元格都有一个类告诉我它在哪里,所以我可以很快地解决它:
<table>
<tr class="row1">
<td class="row1 col1">Something</td>
<td class="row1 col2">Something else</td>
...
<td class="row1 col10">Final thing</td>
</tr>
<tr class="row2">
<td class="row2 col1">Something</td>
<td class="row2 col2">Something else</td>
...
<td class="row2 col10">Final thing</td>
</tr>
<tr class="row3">
<td class="row3 col1">Something</td>
<td class="row3 col2">Something else</td>
...
<td class="row3 col10">Final thing</td>
</tr>
</table>
现在,在你的jQuery中:
$('td').click(function() {
var classes = $(this).attr('class').split(/\s+/),
col,
row,
i;
for (i in classes) {
if (classes[i].substring(0,2) == 'col') { col = classes[i].substring(3); }
if (classes[i].substring(0,2) == 'row') { row = classes[i].substring(3); }
}
alert('You clicked the cell on row ' + row + ' and column ' + col);
});
这看起来有点笨拙,但我喜欢它的是我可以很快地解决表格中的每个单元格:
$('td.row2.col3').text(); // will quickly grab the contents of cell r2,c3
我希望这有用。