如何通过单击返回表格单元格的行和列索引

WCM*_*CMC 6 javascript html-table

请看小提琴。当我单击单元格时,我可以获得值和列名。我想知道如何获取行和列索引?以下是js代码,

<script type="text/javascript">

    $(document).ready(function(){
        $('#example tbody').on( 'click', 'td', function () {
            alert('Data:'+$(this).html().trim());
            alert('Row:'+$(this).parent().find('td').html().trim());
            alert('Column:'+$('#example thead tr th').eq($(this).index()).html().trim());
        });
    });

</script>
Run Code Online (Sandbox Code Playgroud)

Ala*_*ruz 8

另一种本地 JS 方法是使用 TableData 属性,这些属性可以在使用表格元素时找到。例如,cellIndex将返回td元素的列索引并rowIndex返回元素的索引tr。这两个属性将大大简化我们的代码,如下面的代码所示。

const cells = document.querySelectorAll('td');
cells.forEach(cell => {
  cell.addEventListener('click', () =>
    console.log("Row index: " + cell.closest('tr').rowIndex + " | Column index: " + cell.cellIndex));
});
Run Code Online (Sandbox Code Playgroud)
<table>
  <tr>
    <td>0:0</td>
    <td>0:1</td>
    <td>0:2</td>
    <td>0:3</td>
  </tr>
  <tr>
    <td>1:0</td>
    <td>1:1</td>
    <td>1:2</td>
    <td>1:3</td>
  </tr>
  <tr>
    <td>2:0</td>
    <td>2:1</td>
    <td>2:2</td>
    <td>2:3</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 如果存在 rowSpan &gt; 1 的单元格,则此答案是错误的。术语 cellIndex 是正确的,因为它是单元格在其父行的单元格数组中的索引。但是 cellIndex != colIndex 和 rowSpans。考虑 &lt;table&gt; &lt;tr&gt; &lt;td rowSpan="2"&gt; A &lt;/td&gt; &lt;td&gt; B &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; C &lt;/td&gt; &lt;/tr&gt; &lt;/table &gt; . 单元格“C”的 cellIndex 为 0,因为它是其 &lt;tr&gt; 的第一个子级,但实际上位于第 1 列,因为单元格 A 占据 row=1, col=0 表位置 (2认同)

Avr*_*dis 6

不需要jQuery,用原生JS即可实现:

const table = document.querySelector('table');
const rows = document.querySelectorAll('tr');
const rowsArray = Array.from(rows);

table.addEventListener('click', (event) => {
  const rowIndex = rowsArray.findIndex(row => row.contains(event.target));
  const columns = Array.from(rowsArray[rowIndex].querySelectorAll('td'));
  const columnIndex = columns.findIndex(column => column == event.target);
  console.log(rowIndex, columnIndex)
})
Run Code Online (Sandbox Code Playgroud)


Axa*_*lix 5

最好的可能是在这里使用closest

对于集合中的每个元素,通过测试元素本身并向上遍历 DOM 树中的祖先来获取与选择器匹配的第一个元素。

<script type="text/javascript">

    $(document).ready(function(){
        $('#example tbody').on( 'click', 'td', function () {
            alert('Row ' + $(this).closest("tr").index());
            alert('Column ' + $(this).closest("td").index());
        });
    });

</script>
Run Code Online (Sandbox Code Playgroud)