Auto-number table rows?

后端 未结 4 892
无人共我
无人共我 2020-11-29 00:46

I have the following HTML table:

blue
red
相关标签:
4条回答
  • 2020-11-29 01:06

    The following CSS enumerates table rows (demo):

    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>

    If the CSS cannot be used, try the following JavaScript code (demo):

    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>

    0 讨论(0)
  • 2020-11-29 01:07

    Here's a javascript solution that will add a cell at the beginning of each row , this cell will be used for numbering, if there is a th cell this gets a colspan=2 attribute.

    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>

    0 讨论(0)
  • 2020-11-29 01:21

    Here is a modification of David Thomas' CSS solution that works with or without a header row in the table. It increments the counter on the first td cell of each row (thereby skipping the row with only th cells):

    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;
    }
    

    You can see the behavior in this jsfiddle.

    0 讨论(0)
  • 2020-11-29 01:32

    And if you would use headers as well the following is the thing you need: 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;
    }
    

    note the: ":not(:first-child)" in there.

    0 讨论(0)
提交回复
热议问题