0

在具有众多 colspan 的大表中搜索最多单元格的有效方法是什么(合并单元格 ** colspan 应该被忽略,因此在下面的示例中,第一行中单元格的最高数量是 4)。是带有 reg 表达式的 js/jquery 还是带有冒泡排序的循环。我得到了一个链接,如下所示,说明使用正则表达式是否是理想的方式...有人可以为此建议伪代码吗?

由于 jquery 正则表达式补丁,CPU 消耗高

<table width="156" height="84" border="0" >
    <tbody>
        <tr style="height:10px">
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
        </tr>
        <tr style="height:10px">
            <td width="10" style="width:10px; height:10px" colspan="2"/>
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
        </tr>
        <tr style="height:10px">
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px" colspan="2"/>
        </tr>
        <tr style="height:10px">
            <td width="10" style="width:10px; height:10px" colspan="2"/>
            <td width="10" style="width:10px; height:10px"/>
            <td width="10" style="width:10px; height:10px"/>
        </tr>
    </tbody>
</table>
4

2 回答 2

3
var rowWithMaxCells = $("tr").get().reduce(function(a, b) {
    return a.children.length > b.children.length ? a : b;
});

console.log(rowWithMaxCells);

例子

编辑

function getRowWithMaxCells(table) {
    var rows = table.getElementsByTagName("tr"),
        i = rows.length,
        maxIdx = -Infinity,
        curMax = -Infinity;

    while (i--) {
        if (curMax <= rows[i].children.length) {
            curMax = rows[i].children.length;
            maxIdx = i;
        }
    }

    return rows[maxIdx];
}

只是为了完整起见,应该在所有浏览器中工作的版本:)
示例

于 2012-09-18T20:49:36.540 回答
0

我会使用document.querySelector来解决这个问题。

我会做一个简单的循环并寻找./tr/td[index]直到它返回为null. 那么 max 将是index-1

你可以用.getElementsByTagName做类似的事情。

于 2012-09-18T21:04:37.790 回答