【问题标题】:HTML and JavaScript auto increment numberHTML 和 JavaScript 自动递增编号
【发布时间】:2012-06-17 01:58:44
【问题描述】:

我是 HTML 和 JavaScript 的新手。我在 HTML 中遇到了这样的问题(下面的代码只是将问题可视化以方便您参考。)

<tr>
    <td>1</td>
    <td>Harry</td>
</tr>
<tr>
    <td>2</td>
    <td>Simon</td>
</tr>
    <td>3</td>
    <td>Maria</td>
</tr>
</tr>
    <td>4</td>
    <td>Victory</td>
</tr>

这是一个名字列表,但问题是有时我需要在这个表中添加更多名字,我必须在数字 1 前面添加,所以这意味着我必须重新编写数字列表,(例如: 1 1 2 3 4 --> 1 2 3 4 5)。我觉得这不是一个好方法。

注意:我不想更改列表编号从上到下减少。这是一个 HTML 文件,所以不能应用 PHP

任何人都可以帮助我将数字变成像“i”这样的变量,并且一个函数可以帮助我填充变量 i 从上到下自动递增,就像

<tr>
    <td>i</td>
    <td>Harry</td>
</tr>
<tr>
    <td>i</td>
    <td>Simon</td>
</tr>
    <td>i</td>
    <td>Maria</td>
</tr>
</tr>
    <td>i</td>
    <td>Victory</td>
</tr>

函数 Fill_i 例如: 我认为在这种情况下应该使用 JavaScript。感谢您对此问题的帮助和建议。

再次:我不允许使用 PHP 或 ASP,当我添加一个新名称时,我通过 HTML 手动添加它。

【问题讨论】:

  • AAAARRRRRGGGGGGG!!!!!! TD和TR!!!大声笑 jk,名称字段中有名称的数据来自哪里?
  • 数据要自己添加,输入。这不是来自任何数据库

标签: javascript html dom html-table


【解决方案1】:

您可以使用css counter - MDN

table {
  counter-reset: section;
}

.count:before {
  counter-increment: section;
  content: counter(section);
}
<table>
  <tr>
    <td class="count"></td>
    <td>Harry</td>
  </tr>
  <tr>
    <td class="count"></td>
    <td>Simon</td>
  </tr>
  <tr>
    <td class="count"></td>
    <td>Maria</td>
  </tr>
  <tr>
    <td class="count"></td>
    <td>Victory</td>
  </tr>
</table>

FIDDLE

【讨论】:

  • 非常酷,但与旧版浏览器不兼容。不过,OP 可能不在乎。
  • 我什至在test 中添加了一些jQuery,令人印象深刻的动态计数。
  • 亲爱的穆萨,感谢您的酷回答!我可以再问一个问题吗?如果我在一页中有 3 个表格,我该怎么办?因为在第一个表结束后,我想将数字计数重置为 1 并从 1 开始在第二个表中。非常感谢您有更多解决方案供我们参考
  • @Ryan 只是将计数器设置为在表格元素上重置 - 请参阅编辑。
  • @Ryan 看看答案中的代码,看看它在小提琴中的作用
【解决方案2】:

这应该适合你:

<table>
  <tr>
    <td>Harry</td>
  </tr>
  <tr>
    <td>Simon</td>
  </tr>
  <tr>
    <td>Maria</td>
  </tr>
  <tr>
    <td>Victory</td>
  </tr>
</table>
<script>
    var tables = document.getElementsByTagName('table');
    var table = tables[tables.length - 1];
    var rows = table.rows;
    for(var i = 0, td; i < rows.length; i++){
        td = document.createElement('td');
        td.appendChild(document.createTextNode(i + 1));
        rows[i].insertBefore(td, rows[i].firstChild);
    }
</script>

脚本应该紧跟在您的桌子之后。它遍历表格的每一行,并在开头添加一个额外的单元格,该单元格内的数字递增。

JSFiddle Demo

【讨论】:

    【解决方案3】:

    编辑:似乎发布的other solution 会起作用(在我输入此内容时添加)。

    你真的应该使用 PHP 来做这样的动态事情,这对于单个 for 循环来说会变得微不足道。

    但是,如果您坚持使用 HTML/Javascript(或者这可能是一个“静态页面”......),那么您的要求应该是可能的。

    您可以为每个要使用的&lt;td&gt; 元素添加一个类,因此:

    <tr>
        <td class='personid'>i</td>
        <td>Harry</td>
    </tr>
    <tr>
        <td class='personid'>i</td>
        <td>Simon</td>
    </tr>
        <td class='personid'>i</td>
        <td>Maria</td>
    </tr>
    </tr>
        <td class='personid'>i</td>
        <td>Victory</td>
    </tr>
    

    然后你会有一个 javascript 函数来做这样的事情:

    var list = document.getElementsByClassName("personid");
    for (var i = 1; i <= list.length; i++) {
        list[i].innerHTML = i;
    }
    

    【讨论】:

      【解决方案4】:

      您确定不想要有序列表吗?

      <ol>
        <li>Fred</li>
        <li>Barry</li>
      </ol>
      

      【讨论】:

        【解决方案5】:
        <script>
        function addRow(index, name){
            var tbody = document.getElementById("nameList");
            var row = document.createElement("tr");
            var data1 = document.createElement("td");
            data1.appendChild(document.createTextNode(index));
            var data2 = document.createElement("td");
            data2.appendChild(document.createTextNode(name));
            row.appendChild(data1);
            row.appendChild(data2);
            tbody.appendChild(row);
        }
        var name=new Array();
        name[0]="Harry";
        name[1]="Simon";
        name[2]="Maria";
        name[3]="Victory";
        for(var i=0; i < name.length; i++) {
            addRow(i,name[i]);
        }
        </script>
        <html>
        <body>
        <table id="nameList">
        </table>
        </body>
        </html>
        

        【讨论】:

          【解决方案6】:

          我会说这样做(我会假设你不会加载 jquery 或任何花哨的东西):

          <html>
          <head>
          <script type="text/javascript>
          function writeTable(){
          // list of names
          var myList = [ "name1", "name2", "etc", "etc"];
          // your variable to write your output
          var outputTable = "<table>";
          //the div to write the output to
          var outputDiv = document.getElementById("output");
          //the loop that writes the table
          for (var i=0; i<myList.length; i++){
             outputTable += "</tr><td>"+i+"</td><td>"+myList[i]+"</td></tr>";
          }
          //close the table
          outputTable += "</table>";
          //write the table
          outputDiv.innerHTML = outputTable;
          }
          </script>
          </head>
          <body onload=writeTable()>
          <div id='output'></div>
          </body>
          </html>
          

          希望这会有所帮助:)

          【讨论】:

            【解决方案7】:

            试试这个

            $(document).ready(function() {
                var addSerialNumber = function () {
                    $('table tr').each(function(index) {
                        $(this).find('td:nth-child(1)').html(index);
                    });
                };
                addSerialNumber();
             });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-08-28
              • 2010-11-01
              • 2016-07-26
              • 2017-04-21
              • 2012-02-23
              • 2012-08-11
              • 1970-01-01
              相关资源
              最近更新 更多