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

时间:2016-05-03 08:18:39

标签: jquery refactoring

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

$("#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,即使我设置了不同类型的输入(文本,复选框)和选择。 有没有人可以向我介绍一个更简单,更简短的方法?任何帮助都非常感激。

2 个答案:

答案 0 :(得分:3)

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

$('#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;
    });
});

答案 1 :(得分:0)

您是否尝试过使用:first选择器?以下是jQuery网站的文档:https://api.jquery.com/first-selector