【问题标题】:Numbering dynamic table rows为动态表行编号
【发布时间】:2012-07-26 15:58:37
【问题描述】:

我正在使用 jQuery 制作动态 HTML 表格。在一个表中,我的用户有两个交互:

  1. 追加一行
  2. 删除特定行

对行进行编号的问题在于,如果用户删除了特定行,则该行后面的所有行都需要重新编号。我必须选择删除行之后的所有行并将它们的数量减去 1。

有没有更好的方法来解决这个问题?

编辑:这是一个演示问题的 JSFiddle:http://jsfiddle.net/LNXae/2/

我知道有序列表会自动重新编号我的行,但我宁愿使用表格,因为我现在给出的示例非常简单。

【问题讨论】:

  • 您能告诉我们您为什么需要这样做吗?如果您正在修复损坏的外键,您的规范化可能需要修复。不要忘记外键和显示代码可以是单独的列 - 一旦创建,主/外键应该没有理由更改。
  • @halfer,我相信他想更改 html 页面上的文本 - 因为 jQuery 标记。
  • 啊,谢谢@Moo-Juice - 我以为它指的是数据库:)
  • 您是否考虑过使用有序列表?
  • @Blazemonger 我将使用一个列表,但我需要在表中为其他内容提供列,并且我不想担心嵌套的 div..

标签: javascript jquery html


【解决方案1】:

http://jsfiddle.net/mblase75/LNXae/1/

首先,将计数器编号用一个类包裹在 <span> 中,以便稍后查找:

$new_row.children('td').prepend('Row #<span class="num">' + ($new_row.index() + 1) + "</span>");

然后在删除所需的行后使用.each 循环更新所有这些跨度。传入.each的回调函数的第一个参数是一个从零开始的索引号,第二个是HTML元素:

    var $row = $(this).closest('tr'),
        $table = $row.closest('table');
    $row.remove();

    $table.find('tr').each(function(i, v) {
        $(v).find('span.num').text(i + 1);
    });

【讨论】:

  • 这真的很聪明!我在 JSFiddle 中提出的修复方法并没有那么简洁,但它只遍历删除行之后的兄弟姐妹:jsfiddle.net/LNXae/2 没有更好的方法来做到这一点吗?看起来效率很低。
  • 如果表的行数相对较少(例如,少于一千),任何此类优化都不会引起用户注意。
【解决方案2】:

用户添加一行或删除一行后,您只需遍历“数字”单元格即可。如果我们假设您有一个 &lt;td&gt; 元素,我们:

1) 给他们一个漂亮的 ID,例如row_0row_1等……

2) 编写一个函数来迭代它们:

function updateRows(){
    $('[id*="row_"]').each(function(index){
        $(this).html(index + 1); // add +1 to prevent 0 index.
    };
};

【讨论】:

    【解决方案3】:

    我已经编写了一个 jquery 插件,它完全可以做到这一点,你不应该需要对行本身进行“编号”。删除行时您需要做的就是传递被删除行的index

    例如,如果您连续有一个删除按钮:

    <table>
     <tr>
        <td> <input type="button" class="delete" value="delete this row" /></td>
     </tr>
    </table>
    

    jQuery 可能看起来像

    $('.delete').click(function(){
     var index = $(this).parents('tr').index();
     // tell your plugin to delete row "index"
    });
    

    my 插件的方法看起来像这样:

    removeRow: function (index) {
            return this.each(function () {
                var $this = $(this);
                var $tbody = $('tbody', $this);
                var $tr = $('tr', $tbody).eq(index);
                $this.trigger('rowRemoved', [$tr]);
                $tr.remove();
            });
        }
    

    【讨论】:

    • 我认为(因为帖子可能有点模棱两可),他的单元格编号为“001”、“002”、“003”...等,删除后它们不正确或添加。
    猜你喜欢
    • 2013-06-05
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多