在分配事件处理程序之前,您可能会考虑一些 html 扩充。
这是此示例的小提琴:
在此处查看小提琴示例
您需要您的 javascript 来遍历可重复的 html 结构。所以,假设你有一个这样的 html 结构:(见小提琴)
<table class="jsSelectAll">
<tbody>
<tr class="select-all">
<td>Select All</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
</tbody>
<tbody>
<tr class="select-all">
<td>Select All</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Row Label</td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
<td><input type="checkbox" /></td>
</tr>
</tbody>
</table>
然后,我会考虑根据需要拆分表中的每个表和 tbody,并将行(如果需要)和列指针添加到复选框。另外,我会使用闭包来简化事件连接,如下所示:
jQuery(function ($) {
// closures
var $tables = $('table.jsSelectAll');
$tables.each(function () {
// closures
var $table = $(this);
var $tbodies = $table.find('tbody');
$tbodies.each(function () {
// closures
var $tbody = $(this);
var $rows = $tbody.find('tr');
var $selectAllCheckboxes = $tbody.find('.select-all input[type="checkbox"]');
var $allCheckboxes = $tbody.find('tr td input[type="checkbox"]')
// label data cells with rows(if desired) and collumns
$rows.each(function (rowIndex) {
// closures
var $row = $(this);
var $inputs = $row.find('input[type="checkbox"]');
$row.attr('data-row', rowIndex);
$inputs.each(function (colIndex) {
// closures
$cbx = $(this);
$cbx.attr('data-col', colIndex);
});
});
// wire select all for each select-all row checkbox
$selectAllCheckboxes.each(function () {
// closures
var $cbx = $(this)
var fClick = function () {
var iCol = $cbx.attr('data-col');
$allCheckboxes
.filter('[data-col="' + iCol + '"]')
.each(function () {
$(this).prop('checked', true);
});
};
$cbx.click(fClick);
});
});
});
});