打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
javascript – 确定位于单元格下方的表列中的单元格

在下表中:

<table>    <thead>        <tr>            <th>Th1</th>            <th colspan='2'>Th23</th>            <th>Th4</th>        </tr>    </thead>    <tbody>        <tr>            <td>Td1</td>            <td>Td2</td>            <td>Td3</td>            <td>Td4</td>       </tr>    </tbody></table>

对于包含文本“Th23”的表格单元格,我想知道它下面有哪些单元格.在这种情况下,答案将是分别包含文本“Td2”和“Td3”的单元格.

是否有任何DOM属性或内置函数可以帮助进行此类计算?

@Matt McDonald有一个更通用的解决方案.

这就是我最终得到的结果:

// get tbody cell(s) under thead cell (first arg)// if rowIndex===undefined, get from all rows; otherwise, only that row index// NOTE: does NOT work if any cell.rowSpan != 1var columnCells = function( th, rowIndex ) {    // get absolute column for th    for( var absCol=0, i=0; true; i   ) {            if( th.parentNode.cells[i] == th ) break;            absCol  = th.parentNode.cells[i].colSpan;    }    // look in tBody for cells; all rows or rowIndex    var tBody = th.parentNode.parentNode.nextSibling;    var cells = [];    for( var r=((rowIndex==undefined)?0:rowIndex); true; r   ) {            if( rowIndex!==undefined && r>rowIndex ) break;            if( rowIndex==undefined && r>=tBody.rows.length ) break;            for( var c=0; true; c =tBody.rows[r].cells[c].colSpan ) {                    if( c < absCol ) continue;                    if( c >= absCol th.colSpan ) break;                    cells.push(tBody.rows[r].cells[c]);            }    }    return cells;}

解决方法:

马上,你需要做三件事:

>为表提供id属性以便于选择.
>为目标单元格提供id属性以便于选择.
>选择单元格的parentNode(行)

这三件事将使表格相关的计算更容易.

Next up是一个抓取指定单元格的伪属性的函数.在这种情况下,我们正在寻找它的“起始索引”(就列而言),它的“结束索引”(就列而言),以及它的“宽度”(结束 – 开始,也在列中).

从那里,您可以遍历表的行并检查哪些单元格位于开始和结束索引之间.

HTML:

<table id="foo">    <colgroup span="1">    <colgroup span="2">    <colgroup span="1">    <thead>        <tr>            <th>foo</th>            <th id="example" colspan="2">bar</th>            <th>baz</th>        </tr>    </thead>    <tbody>        <tr>            <td>bing</td>            <td>bang</td>            <td>boom</td>            <td>bong</td>        </tr>    </tbody></table>

JS(跟我一起):

function getCellSpanProps(table, row, cell){    var isRow = (function()    {        var i = 0, currentRow;        for(i;i<table.rows.length;i  )        {            currentRow = table.rows[i];            if(currentRow === row)            {                return true;            }            currentRow = null;        }        return false;    }()),     cellHasCorrectParent, i = 0,     currentCell, colspanCount = 0,    props;    if(isRow)    {        cellHasCorrectParent = (function()        {            return cell.parentNode === row;        }());        if(cellHasCorrectParent)        {            for(i;i<row.cells.length;i  )            {                currentCell = row.cells[i];                if(currentCell === cell)                {                    props = {"start": colspanCount,                     "end": colspanCount   cell.colSpan,                     "width": (colspanCount   cell.colSpan) - colspanCount};                    break;                }                colspanCount  = currentCell.colSpan;                currentCell = null;            }            row = null;        }        return props;    }}function findCellsUnderColumn(table, props){    var i = 0, j = 0, row, cell,    colspanCount = 0, matches = [],    blacklist = {"": true, "NaN": true, "null": true, "undefined": true,     "false": true};    if(blacklist[props.start] || blacklist[props.end] || blacklist[props.width])    {        return false;    }    for(i;i<table.rows.length;i  )    {        row = table.rows[i];        colspanCount = 0;        for(j=0;j<row.cells.length;j  )        {            cell = row.cells[j];            if(colspanCount >= props.start && colspanCount < props.end)            {                matches.push(cell);            }            colspanCount  = cell.colSpan;            cell = null;        }        row = null;    }    return matches;}var table = document.getElementById("foo"), example = document.getElementById("example"),targetRow = example.parentNode,props = getCellSpanProps(table, targetRow, example),matches = findCellsUnderColumn(table, props);console.log(matches);

演示:http://jsbin.com/ohohew/edit#javascript,html

这将确定哪些单元格位于您要查找的特定列中(包括示例).您可以自定义功能以满足您的需求,如果这不是您正在寻找的.

来源:https://www.icode9.com/content-1-313051.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Gridview创建头
javascript 读取gridview单元格的值
datagridview总结
ExcelVBA_004 Excel批量插入图片
导出table表格到excel
datagrid可编辑表格使用Combobox多选编辑时无法选择、新增时无法保存BUG解决
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服