最近写代码遇到了一个问题,怎么在表格中查找特定的td或者其他东西。
试了很多方法,结果当解决之后发现其实特别简单。
1.我想的是通过id读取,但是我是通过ajax从后端返回信息的。id是动态加载的,id不是固定的。
2.通过.find().eq()方法。.find()或者.children()都是寻找元素,.children()的作用是寻找当前元素的子元素。但他似乎并不能查找某一个元素。比如我用tr.children(“td”),他会寻找tr中的所有td。.eq()可以限定是第几个。比如.eq(0)就是第一个id。合起来用tr.children(“td”).eq(0);他会寻找tr下的第一个td。但是这又有一个问题,一张表很少只有一个tr。如果前面的tr是标签,则会选出所有tr的第一个td,如果是id则会选出某一个tr的第一个td。但是我想批量选择。
3.我的要求是,给表格添加一列或多列复选框。每列复选框对应一某列数据。这个问题困扰了我许久,今天终于一拍脑袋去看了下jquery选择器文档。发现他里面有一个属性选择器正好符合我的要求。
下面截取代码片段。
我通过ajax添加了一张表,这是其中一列
"<td id="+ records[i].qId +">" + records[i].qName + "</td>"
接着给表插入复选框。
function initTableCheckbox() {
var $thr = $('table thead tr');
var $checkAllTh = $('<th><input type="checkbox" id="checkAll" name="checkAll" /></th>');
/*将全选/反选复选框添加到表头最前,即增加一列*/
$thr.prepend($checkAllTh);
/*“全选/反选”复选框*/
var $checkAll = $thr.find('input');
$checkAll.click(function (event) {
/*将所有行的选中状态设成全选框的选中状态*/
$tbr.find('input').prop('checked', $(this).prop('checked'));
/*并调整所有选中行的CSS样式*/
if ($(this).prop('checked')) {
$tbr.find('input').parent().parent().addClass('warning');
} else {
$tbr.find('input').parent().parent().removeClass('warning');
}
/*阻止向上冒泡,以防再次触发点击操作*/
event.stopPropagation();
});
/*点击全选框所在单元格时也触发全选框的点击操作*/
$checkAllTh.click(function () {
$(this).find('input').click();
});
var $tbr = $('table tbody tr');
var $checkItemTd = $('<td><input type="checkbox" name="checkItem" /></td>');
/*每一行都在最前面插入一个选中复选框的单元格*/
$tbr.prepend($checkItemTd);
/*点击每一行的选中复选框时*/
$tbr.find('input').click(function (event) {
/*调整选中行的CSS样式*/
$(this).parent().parent().toggleClass('warning');
/*如果已经被选中行的行数等于表格的数据行数,将全选框设为选中状态,否则设为未选中状态*/
$checkAll.prop('checked', $tbr.find('input:checked').length == $tbr.length ? true : false);
/*阻止向上冒泡,以防再次触发点击操作*/
event.stopPropagation();
});
/*点击每一行时也触发该行的选中操作*/
$tbr.click(function () {
$(this).find('input').click();
});
}
原文地址:https://blog.csdn.net/sinat_29718177/article/details/81181953
十分感谢大佬的分享。
如果只增加一列复选框,这段代码甚至可以不用修改。但是我的需求是多列复选框。
这段代码就会对多列复选框一起操作。
所以要通过input标签的id进行筛选。将某一列所有的.find(‘input’)改为.find(‘input[name = checkS]’)
比如:
var $checkStudy = $thr.find('input[name = checkS]');