自动编号表格行?

IT技术 javascript html-table
2021-03-10 02:13:51

我有以下 HTML 表:

<table border="1">
  <tr>
    <td>blue</td>
  </tr>
  <tr>
    <td>red</td>
  </tr>
  <tr>
    <td>black</td>
  </tr>
</table>

我希望此表中的每一行都有一个自动分配给每个项目的编号。

他能怎么办?

4个回答

以下 CSS 枚举表格行(演示):

table {
  counter-reset: rowNumber;
}

table tr::before {
  display: table-cell;
  counter-increment: rowNumber;
  content: counter(rowNumber) ".";
  padding-right: 0.3em;
  text-align: right;
}
<table cellpadding="0">
  <tr><td>blue</td></tr>
  <tr><td>red</td></tr>
  <tr><td>yellow</td></tr>
  <tr><td>green</td></tr>
  <tr><td>purple</td></tr>
  <tr><td>orange</td></tr>
  <tr><td>maroon</td></tr>
  <tr><td>mauve</td></tr>
  <tr><td>lavender</td></tr>
  <tr><td>pink</td></tr>
  <tr><td>brown</td></tr>
</table>

如果无法使用 CSS,请尝试以下 JavaScript 代码(演示):

var table = document.getElementsByTagName('table')[0],
  rows = table.getElementsByTagName('tr'),
  text = 'textContent' in document ? 'textContent' : 'innerText';

for (var i = 0, len = rows.length; i < len; i++) {
  rows[i].children[0][text] = i + ': ' + rows[i].children[0][text];
}
<table border="1">
  <tr>
    <td>blue</td>
  </tr>
  <tr>
    <td>red</td>
  </tr>
  <tr>
    <td>black</td>
  </tr>
</table>

大惊小怪,我从来不知道 css 的计数器。
2021-04-18 02:13:51
+1 我删除了我的答案,因为我没有费心为 提供修复.textContent,但我真的建议使用 自动提供.rowsand.cells集合而不是getElementsByTagName()and .children
2021-04-21 02:13:51
@Benia:只是使用table.rows而不是table.getElementsByTagName('tr')在第一条评论中提到的?
2021-05-01 02:13:51
@Craig:我很高兴向您介绍了一些有趣的东西!
2021-05-07 02:13:51
css 代码对我有用,但第一个 td 从 2 开始,而不是从 1 开始。也许它将 th 计为 td,因此从 2 开始......无论如何,您可以在此处查看:benia.biz/pricing。 ..会很感激这个解决方案,并很乐意为它提供赏金。
2021-05-14 02:13:51

如果您也使用标头,则需要以下内容:http : //jsfiddle.net/davidThomas/7RyGX/

table {
    counter-reset: rowNumber;
}

table tr:not(:first-child) {
    counter-increment: rowNumber;
}

table tr td:first-child::before {
    content: counter(rowNumber);
    min-width: 1em;
    margin-right: 0.5em;
}

注意:“:not(:first-child)”在那里。

谢谢!接受的答案会导致标题出现问题,这个没有!谢谢!
2021-04-20 02:13:51
您已链接到一个 JS Fiddle 演示,该演示在您的问题中不包含 jQuery。如果您添加 jQuery 并(大概)删除该 JS Fiddle 中已经使其正常工作的 CSS,然后点击屏幕顶部的“更新”按钮,您将获得一个演示您的代码而不是我的代码的演示. 我想哪个对你更有用。否则,您可以使用“堆栈片段”将基于前端(HTML、CSS 和 JavaScript)的代码嵌入到您的答案中(单击编辑,然后单击</>文本区域上方的按钮)。
2021-05-05 02:13:51

这是对 David Thomas 的 CSS 解决方案的修改,该解决方案可以在表格中使用或不使用标题行。它在td每行的第一个单元格上增加计数器(从而跳过只有th单元格的行):

table
{
    counter-reset: rowNumber;
}

table tr > td:first-child
{
    counter-increment: rowNumber;
}

table tr td:first-child::before
{
    content: counter(rowNumber);
    min-width: 1em;
    margin-right: 0.5em;
}

你可以在这个 jsfiddle 中看到行为

这是一个 javascript 解决方案,它将在每行的开头添加一个单元格,该单元格将用于编号,如果有一个th单元格,则会获得一个colspan=2属性。

var addNumeration = function(cl){
  var table = document.querySelector('table.' + cl)
  var trs = table.querySelectorAll('tr')
  var counter = 1
  
  Array.prototype.forEach.call(trs, function(x,i){
    var firstChild = x.children[0]
    if (firstChild.tagName === 'TD') {
      var cell = document.createElement('td')
      cell.textContent = counter ++
      x.insertBefore(cell,firstChild)
    } else {
      firstChild.setAttribute('colspan',2)
    }
  })
}

addNumeration("test")
<table class="test" border="1">
  <tr>
   <th>hi!</th>
  </tr>
  <tr>
    <td>blue</td>
  </tr>
  <tr>
    <td>red</td>
  </tr>
  <tr>
    <td>black</td>
  </tr>

</table>

这对我来说是最好的解决方案。我们如何在顶部添加另一行带有字母 az 的行?
2021-04-27 02:13:51