5

我意识到这个问题与之前提出的一些问题相似,我可能没有得到它,因为现在是晚上 9 点,但我很想得到一点关于如何解决问题的指示。我知道我要去哪里错了,我只是不知道如何解决它:

我正在克隆一个带有 4 个选择框的表格行,我想克隆 id 和名称,但将 id 加一。这就是我目前所拥有的。

$(document).on("click", "#new_item", function() {
    var rowCount = $("#widget_location_options tbody>tr:last select").attr("id").match(/\d+/);
    var rowCount1 = rowCount*1 + 1;
    var row = $("#widget_location_options tbody>tr:last").clone(true);
    $("select option:selected", row).attr("selected", false);
    $("select", row).attr("name", $("select", row).attr("name").replace(/\d+/, rowCount1) );
    $("select", row).attr("id", $("select", row).attr("id").replace(/\d+/, rowCount1) );
    row.insertAfter("#widget_location_options tbody>tr:last");
});

问题是它采用了第一个选择的 id 和名称并正确地增加了 id 但将它应用于所有不是我想要的选择。

为清楚起见,我正在克隆的行的 HTML 如下所示:

<tr>
<td><select id="arr_widget_location[1][position_id]" name="arr_widget_location[1][position_id]">
<option value="value">label</option>
</select></td>

<td><select id="arr_widget_location[1][position_id]" name="arr_widget_location[1][position_id]">
<option value="value">label</option>
</select></td>

<td><select id="arr_widget_location[1][position_id]" name="arr_widget_location[1][position_id]">
<option value="value">label</option>
</select></td>

<td><select id="arr_widget_location[1][position_id]" name="arr_widget_location[1][position_id]">
<option value="value">label</option>
</select></td></tr>

希望有人能指出我要去哪里可怕的错误!

非常感谢

4

2 回答 2

9

@Mark F,您给了我正确方向的提示-谢谢。实际的解决方案如下所示:

$(document).on("click", "#new_item", function() {
    ...

    $(row).find("select").each(function(){
        $(this).attr("name", $(this).attr("name").replace(/\d+/, rowCount1) );
    });
    $(row).find("select").each(function(){
        $(this).attr("id", $(this).attr("id").replace(/\d+/, rowCount1) );
    });


    ...
});

令人惊讶的是,睡个好觉并朝着正确的方向轻推可以实现。

再次感谢。

于 2013-06-06T16:14:16.240 回答
1

您正在选择select除该行之外的所有元素,并更改所有名称和 ID。

$("select", row).attr("name", $("select", row).attr("name").replace(/\d+/, rowCount1) );
$("select", row).attr("id", $("select", row).attr("id").replace(/\d+/, rowCount1) );

看起来你正试图select在你克隆的行中获取每个,就像这样。

$(row).find("select").attr("name", $("select", row).attr("name").replace(/\d+/, rowCount1) );
于 2013-06-05T20:29:26.620 回答