不使用 eq() 更新输入名称属性

Update input name attribute without eq()

我使用下面的代码在名称末尾动态添加行号,以使请求参数唯一。

$("#myTable").find("tr").each(function() {
    var text = $(this).find("td input:text");
    var select = $(this).find("select");
    var cb = $(this).find("td input:checkbox");
    select.eq(0).prop("name", select.eq(0).prop("name") + counter);
    text.eq(0).prop("name", text.eq(0).prop("name") + counter);
    text.eq(1).prop("name", text.eq(1).prop("name") + counter);
    cb.eq(0).prop("name", cb.eq(0).prop("name") + counter);
});

有没有一种方法可以减少我上面的代码,而不是指定 eq()index,即使我设置了不同类型的输入(文本、复选框)和 select。 有谁能向我介绍一种更简单、更简短的方法吗?非常感谢任何帮助。

:input 选择器将检索所有输入,因此您不需要为 select 和复选框设置单独的子句。从那里你可以通过向 prop() 方法提供一个函数来否定对 each() 循环的需要,该方法接受当前值作为你可以附加到的参数。试试这个:

$('#myTable :input').prop('name', function(i, v) {
    return v + counter;
});

如果您需要增加 counter 变量,那么您仍然需要 each() 循环,尽管您可以像这样使用当前 tr 的索引来自动执行它:

$('#myTable tr').each(function(tr_i) {
    $(this).find(':input').prop('name', function(inp_i, v) {
        return v + tr_i;
    });
});

您尝试过使用 :first 选择器吗?这是来自 jQuery 网站的文档:https://api.jquery.com/first-selector.