在以下代码中:http://jsfiddle.net/ueP5U/1/
我有一个表格,其中每个第t /第member成员都被<tr>
var tableIterator = function(table, process) {
$.each(table.children(), function() { //cycle through thead,tbody,tfoot
$(this).children().each(function() { //cycle through thead, tbody, tfoot "tr"s
process.call($(this));
});
});
}
tableIterator($("table"), function() {
$(this).find("td,th").each(function() {
$(this).text("Index: " + $(this).index());
});
});
该表可以包含两个或多个标题,其中父标题获得更大的colspan,而底标题通过给出等量的列来符合(即索引4有两个子索引为1和2)。
我实际上要做的是制作父标题,选择所有'子标题'(当然不是实际的dom子节点),并根据所选列进行相同的操作。
我得到了逻辑:每个标题元素,需要找到它以前的兄弟'子'索引并将colspan的数量添加到它自己的子项中以获得它们的索引(即索引5 [colspan = 2],转到索引4,找到它的最后一个孩子(索引1))并将colspans的数量添加到它的'children'中,这样它们就会有索引:2和索引:3(+ = 1 * colspan.val()次)
同样适用于't''孩子'。
我假设我需要创建一个包含绑定元素的对象数组,根据使用jQuery.filter显示的内容(返回$(“thead”)。findByColumn(2 [或任何其他顶部标题索引]))
会喜欢一些帮助,因为我甚至在开始时遇到了麻烦,点击突出显示的示例,按max_width隐藏或根据选择在列上运行的内容非常受欢迎!
答案 0 :(得分:0)
function iterTable(table, callback) {
// Keeps track of which indices are blocked by larger cells
var blocked = [];
$("thead,tbody,tfoot", table).each(function (groupIndex) {
var groupName = this.tagName;
$("tr", this).each(function (rowIndex) {
var colIndex = 0;
var blockedRow = blocked[0] || [];
$("td,th", this).each(function () {
var $cell = $(this);
var colSpan = parseInt($cell.prop("colspan")) || 1;
var rowSpan = parseInt($cell.prop("rowspan")) || 1;
// Skip all blocked cells
while (blockedRow[colIndex]) {
colIndex++;
}
callback(groupIndex, groupName, rowIndex, colIndex, $cell);
// Mark all sub-cells as blocked.
for (var i = 0; i < rowSpan; i++) {
for (var j = 0; j < colSpan; j++) {
if (!blocked[i]) blocked[i] = [];
blocked[i][colIndex+j] = true;
}
}
colIndex += colSpan;
});
// Pop the first element; We don't need it any more.
blocked.shift();
});
});
}
var columns = [];
iterTable($('table'), function (groupIndex, groupName, rowIndex, colIndex, $cell) {
$cell.text(groupName + " " + rowIndex + "," + colIndex);
if (groupName == "TBODY") {
// Save the cell into a specific column.
if (!columns[colIndex]) columns[colIndex] = [];
columns[colIndex][rowIndex] = $cell;
}
else { // THEAD or TFOOT
var colSpan = parseInt($cell.prop("colspan")) || 1;
$cell.click(function () {
// Toggle the background for the column under the header.
for (var i = 0; i < colSpan; i++) {
$.each(columns[colIndex+i], function () {
$(this).toggleClass('selected');
});
}
});
}
});