【问题标题】:How to re-order table row numbers when rows are added and removed添加和删​​除行时如何重新排序表行号
【发布时间】:2013-02-19 20:24:50
【问题描述】:

我正在使用 javascript 动态生成表行(不涉及 jquery)。每行有 3 个单元格区域编号、输入和删除按钮。添加的行数使用选择框,如果他们选择 3,则添加 3 行等。我想要发生的是,如果他们添加 3 行,然后再添加 3 行。这些行将显示为 1、2、3、4、5、6,目前为 1、2、3、1、2、3。我还有什么在删除行时重新排序行。

当前代码php文件:

   function display_Zones($focus, $field, $value, $view){

    global $locale, $app_list_strings, $mod_strings;

    $html = '';

    if($view == 'EditView'){

        $html .= '<script src="modules/dry_Zones/zone_items.js"></script>';
        $html .= "<div style='padding-top: 10px; padding-bottom:10px;'>";
        $html .= "<select id='zone' name='zone'>";
        $html .= get_select_options_with_id($app_list_strings["zone_list"]);
        $html .= "</select> ";

        $html .= "<input type=\"button\" tabindex=\"116\" class=\"button\" value=\"addZone\" id=\"addZone\" onclick=\"insertZone()\" />";
        $html .= "</div>";

        $html .= "<table border='0' cellspacing='4' width='40%' id='zoneItems'>";
        $html .= "<tr><td></td><td>Motor Reference Point</td><td></td></tr>";

        $html .= "</table>";



        return $html;
    }

javascript 文件:

 var num = 1;

 function insertZone() {

var table = document.getElementById('zoneItems');

var e = document.getElementById('zone');
var number = e.options[e.selectedIndex].value;

if(number != ''){


    for (var i=0; i < number; i++)
    {
        var x = table.insertRow(-1);
        var a = x.insertCell(0);
        num = num+i;

        a.innerHTML = "<span>Zone: "+num+"</span> ";

        var b = x.insertCell(1);
        b.innerHTML = "<input type='text' name='motor_ref_point' size='18' value='' />";

        var c = x.insertCell(2);
        c.innerHTML = "<button class='button lastChild' onclick='removeZone(this)' ><img src='themes/default/images/id-ff-clear.png'></button>";
    }


}

}

  function removeZone(rows) {

  var _row = rows.parentElement.parentElement;
  document.getElementById('zoneItems').deleteRow(_row.rowIndex);



   }          

【问题讨论】:

    标签: javascript


    【解决方案1】:

    可能不是最有效的方式,但我认为除非您有数千行,否则您不会注意到任何问题。当您添加/删除行时,您只需遍历每行的第一个表格单元格并根据索引对其进行更新。

    Array.prototype.forEach.call(document.querySelectorAll('td:first-child'),
    function (elem, idx) {
        elem.innerHTML = idx + 1;
    });
    

    http://jsfiddle.net/ExplosionPIlls/2QxX6/

    【讨论】:

    • +1;我正要打出一个包含相同内容的答案。
    • insertZoneremoveZone 之后调用它
    • 此页面上有多个表格,它是 ui 的一部分。调用只是空白页面并显示 1
    • @user794846 您可以使用更具体的选择器,例如'#zoneItems td:first-child'。不是刻薄,但我相信你可以自己找出一些的东西
    • 我没有在下面回答我自己的问题。只是以冗长的方式完成了。
    【解决方案2】:

    最后只是这样做:

    function insertZone() {
    
    var table = document.getElementById('zoneItems');
    
    var e = document.getElementById('zone');
    var number = e.options[e.selectedIndex].value;
    
    if(number != ''){
    
    
        for (var i=0; i < number; i++)
        {
            var x = table.insertRow(-1);
            var a = x.insertCell(0);
            num = i+1;
    
           // a.innerHTML = "<span>Zone: "+num+"</span> ";
    
            var b = x.insertCell(1);
            b.innerHTML = "<input type='text' name='motor_ref_point' size='18' value='' />";
    
            var c = x.insertCell(2);
            c.innerHTML = "<button class='button lastChild' onclick='removeZone(this)' ><img src='themes/default/images/id-ff-clear.png'></button>";
        }
    
        count();
    }
    

    }

      function removeZone(rows) {
    
    var _row = rows.parentElement.parentElement;
    document.getElementById('zoneItems').deleteRow(_row.rowIndex);
    
    count();
    }
    
    function count(){
    
    var table = document.getElementById("zoneItems");
    var tbody = table.tBodies[0];
    row_count = tbody.rows.length - 1;
    
    for (var i = 0, row; row = tbody.rows[i]; i++) {
    
        if(i != 0){
    
            for (var j = 0, col; col = row.cells[j]; j++) {
    
                if(j == 0){
                    col.innerHTML = "<span>Zone: "+i+"</span> ";
                }
            }
        }
    
    }
    
    }
    

    【讨论】:

    • if (i != 0) 是怎么回事?
    • 确保它不是表格中的第一行,因为其中包含标题。
    • 在这种情况下,第一行应该在&lt;thead&gt;,而不是tbodies,你应该在列中使用&lt;th&gt;
    • 那么最终你可以使用我的答案。只需更新为elem.innerHTML = "&lt;span&gt;Zone:" + (idx + 1) + "&lt;/span&gt;";
    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2020-03-20
    • 2022-01-17
    • 2015-08-08
    • 2013-04-18
    • 2019-07-11
    相关资源
    最近更新 更多