使用jQuery,你如何计算表中有多少列?
<script>
alert($('table').columnCount());
</script>
<table>
<tr>
<td>spans one column</td>
<td colspan="2">spans two columns</td>
<td colspan="3">spans three columns</td>
<tr>
</table>
此示例中的列总数为6.如何使用jQuery确定这一点?
答案 0 :(得分:54)
你走了:
$(function() {
var colCount = 0;
$('tr:nth-child(1) td').each(function () {
if ($(this).attr('colspan')) {
colCount += +$(this).attr('colspan');
} else {
colCount++;
}
});
});
答案 1 :(得分:33)
$("table").find("tr:first td").length;
我编辑,因为我没有意识到你在计算colspan的。
如果你想包括使用colspan,请尝试循环第一行中的td:
var cols = $("table").find("tr:first td");
var count = 0;
for(var i = 0; i < cols.length; i++)
{
var colspan = cols.eq(i).attr("colspan");
if( colspan && colspan > 1)
{
count += colspan;
}else{
count++;
}
}
答案 2 :(得分:29)
这是我认为最干净的。它处理表中的表。而且简短而简单:
$("table > tbody > tr:first > td").length
答案 3 :(得分:5)
在POJS(普通旧JavaScript)中:
HTML:
<table id="foo">
<thead></thead>
<tbody>
<tr>
<td>1</td>
<td colspan="2">2</td>
<td colspan="3">3</td>
</tr>
</tbody>
<tfoot></tfoot>
</table>
JS:
var foo = document.getElementById("foo"), i = 0, j = 0, row, cell, numCols = 0;
//loop through HTMLTableElement.rows (includes thead, tbody, tfoot)
for(i;i<foo.rows.length;i++)
{
row = foo.rows[i];
//loop through HTMLTableRowElement.cells
for(j = 0;j<row.cells.length;j++)
{
cell = row.cells[j];
numCols += cell.colSpan;
cell = null;
}
row = null;
}
alert(numCols) //6;
HTMLTableElement .rows将收集每个HTMLTableSectionElement(THead,TBody和TFoot)的行。每个部分也有自己的rows
HTMLCollection,因此您可以根据需要对其进行过滤。
答案 4 :(得分:4)
要健壮......我会做this
之类的事情alert(numCol("table") + " is the max number of cols");
function numCol(table) {
var maxColNum = 0;
var i=0;
var trs = $(table).find("tr");
for ( i=0; i<trs.length; i++ ) {
maxColNum = Math.max(maxColNum, getColForTr(trs[i]));
}
return maxColNum;
}
function getColForTr(tr) {
var tds = $(tr).find("td");
var numCols = 0;
var i=0;
for ( i=0; i<tds.length; i++ ) {
var span = $(tds[i]).attr("colspan");
if ( span )
numCols += parseInt(span);
else {
numCols++;
}
}
return numCols;
}
以防我们在不同的行之间进行一些琐事。
答案 5 :(得分:1)
注意colspan attr
答案 6 :(得分:1)
传递表格,例如$('foo#table')或$('table:first')
function getColumnCount(e) { //Expects jQuery table object
var c= 0;
e.find('tbody tr:first td').map(function(i,o) { c += ( $(o).attr('colspan') === undefined ? 1 : parseInt($(o).attr('colspan')) ) } );
return c;
}
答案 7 :(得分:1)
为了规避td / th问题(并且还解决了attr('colspan')给我字符串的潜在问题)我接受了这个:
var colspan = 0;
$('#table').find('tr:first').children().each(function(){
var cs = $(this).attr('colspan');
if(cs > 0){ colspan += Number(cs); }
else{ colspan++; }
});
答案 8 :(得分:0)
您必须为标题行设置ID:
<table>
<tr id="headerRow">
<td>spans one column</td>
<td colspan="2">spans two columns</td>
<td colspan="3">spans three columns</td>
</tr>
</table>
然后您可以使用以下功能:
function getColumnCount(headerRowId) {
var columnCount = 0;
$('#' + headerRowId + ' > td').each(function() {
var colspanValue = $(this).attr('colspan');
if (colspanValue == undefined) {
columnCount++;
} else {
columnCount = columnCount + parseInt(colspanValue);
}
});
return columnCount;
}
答案 9 :(得分:0)
我简化了Craig M.的回答。 并修改为适用于td和th标签。
function GetColumnCount($Table)
{
var ColCount = 0;
$Table.find("tr").eq(0).find("th,td").each(function ()
{
ColCount += $(this).attr("colspan") ? parseInt($(this).attr("colspan")) : 1;
});
return ColCount;
}
答案 10 :(得分:0)
var foo = document.getElementById("price-test-table")
foo.tBodies["0"].firstElementChild.children.length
答案 11 :(得分:0)
使用jQuery和reduce它可能看起来像这样:
$.fn.tableCellCount = function() {
return $(this).find('tr:first td, tr:first th').get().reduce(function(a,b) {
return a + ($(b).attr('colspan') ? parseInt($(b).attr('colspan')) : 1);
},0)
}
$('table').tableCellCount();
甚至更简单:
$.fn.tableCellCount = function() {
return $(this).find('tr:first td, tr:first th').get().reduce(function(a,b) {
return a + (b.colSpan ? parseInt(b.colSpan) : 1);
},0)
}
$('table').tableCellCount();
答案 12 :(得分:0)
这是我所做的简单解决方案: 如果您使用 TR 将 TH 更改为 TR 。 使用JQUERY:
<script>
$(document).ready(function() {
var number = $("table > tbody > tr:first > th").length;
for(var i=0; i <= number; i++){
$('th:nth-child('+ i +')').hide();
}
});
</script>
答案 13 :(得分:0)
/**
* Get number of columns in table.
* @param {string} table jQuery selector
* @param {boolean} [malformed=false] whether to inspect each row of malformed table;
* may take some time for large tables
* @returns {?number} number of columns in table, null if table not found.
*/
function getTableColumnsCount(table, malformed) {
malformed = malformed || false;
var $table = $(table);
if (!$table.length) {
return null;
}
var rows = $table.children('thead, tfoot, tbody').children('tr');
if (!malformed) {
// for correct tables one row is enough
rows = rows.first();
}
var maxCount = 0;
rows.each(function () {
var currentCount = 0;
$(this).children('th, td').each(function () {
currentCount += this.colSpan;
});
maxCount = Math.max(maxCount, currentCount);
});
return maxCount;
}
见行动https://jsfiddle.net/kqv7hdg5。
colspan
。<thead>
,<tfoot>
,<tbody>
。<th>
和<td>
的混合。对于那些想要传递jQuery对象而不是选择器https://jsfiddle.net/5jL5kqp5的用户进行了略微修改。
答案 14 :(得分:0)
一行:
if ( err.response ) {
/* format and send the useful err.response message to the browser user */
return
} else {
const errid = uuidv4()
const message = 'Something went wrong. ' +
'If it keeps happening please contact us and mention error id ' +
errid
console.error (message, err)
/* send the message to the browser user */
return
}
答案 15 :(得分:-1)
function(){
num_columns = 0;
$("table td]").each(function(){
num_columns = num_columns + ($(this).attr('colspan') == undefined ? 1 : $(this).attr('colspan'));
});
return num_columns;
}