【发布时间】:2020-11-29 17:55:53
【问题描述】:
我觉得我的需求很基本,但我找不到示例。
我不怎么使用 jQuery,但我需要一个函数来遍历给定表中的每一行,然后遍历该行中的每个输入,然后按顺序重新索引每个 id 和 name 属性。服务器端应用程序需要按顺序编号的输入才能正确构建对象列表。我有单独的函数来删除和添加行,因此用户有可能删除中间的行,从而产生间隙。
首先,我已经有了这个,但我不确定如何使用 jQuery 在循环中执行循环,并简单地评论了该部分。
编辑: 我还提供了 HTML 的 sn-p 以获取更多上下文。对于收集对象的服务器端应用程序,只需要枚举 name 属性,例如 AccountCodes[0].Id 然后是 AccountCodes[1].Id 而不是 [0],[6]。
function LoopAccountCodeRows() {
var accountCodeIndex = 0;
$('table#AccountCodeTable tbody tr').each(function () {
//loop through input logic here
$(this).attr("id", $(this).attr("id").replace(/\d+/, accountCodeIndex));
$(this).attr("name", $(this).attr("name").replace(/\d+/, accountCodeIndex));
//end input loop
accountCodeIndex++;
});
}
<table id="AccountCodeTable">
<thead><tr><th></th><th>Account Codes</th><th>Budget Estimate Percent</th></tr></thead>
<tbody>
<tr>
<td style="padding:.5rem;">
</td>
<td style="padding:.5rem;">
<input id="AccountCodes_0__Id" name="AccountCodes[0].Id" type="hidden" value="135" />
<input id="AccountCodes_0__Action" name="AccountCodes[0].Action" type="hidden" value="Add" />
<input id="AccountCodes_0__AccountCode" name="AccountCodes[0].AccountCode" type="hidden" value="20-10-09-086" />
20-10-09-087
</td>
<td>
<input type="number" class="form-control percent" id="AccountCodes_0__PercentTotal" name="AccountCodes[0].PercentTotal" value="0.10" />
<span class="text-danger field-validation-valid" data-valmsg-for="AccountCodes[0].PercentTotal" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td style="padding:.5rem;" >
</td>
<td style="padding:.5rem;">
<input id="AccountCodes_6__Id" name="AccountCodes[6].Id" type="hidden" value="135" />
<input id="AccountCodes_6__Action" name="AccountCodes[6].Action" type="hidden" value="Add" />
<input id="AccountCodes_6__AccountCode" name="AccountCodes[6].AccountCode" type="hidden" value="20-10-09-087" />
20-10-09-087
</td>
<td>
<input type="number" class="form-control percent" id="AccountCodes_6__PercentTotal" name="AccountCodes[6].PercentTotal" value="0.10" />
<span class="text-danger field-validation-valid" data-valmsg-for="AccountCodes[6].PercentTotal" data-valmsg-replace="true"></span>
</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
为什么不在要循环的元素上使用 JS
for()循环? -
“服务器端应用程序需要按顺序编号的输入才能正确构建对象列表。” - 这听起来像是服务器应用程序中的一个错误。修复服务器端是有意义的。 (此外,元素 ID 无论如何都不会传输到服务器,修复它们几乎没有用。)
-
对象的枚举列表需要一个顺序索引才能在服务器端注册。是的,不需要更改元素 ID,我只是喜欢匹配 ID/名称,以防将来出现任何其他客户端逻辑。
标签: jquery