我有一些看起来像这样的HTML:
<tbody>
<tr id="upload_row_0">
<tr id="upload_row_1">
<tr id="upload_row_2">
<td>
<select name="task_exec_platform">
</td>
<td>
<input type="file" name="task_exec_config_2">
</td>
<td>
<input type="file" name="task_exec_2">
</td>
<td>
<a onclick="deleteTaskExecRow("#upload_row_2")">
</td>
</tr>
</tbody>
每一行都会展开并包含类似的<td>
元素,但我只是为了简洁而展示了一个片段。标识"upload_row_0"
存储在变量obj
。
我想选择每个后续兄弟行的第二个孩子。换句话说,我想更改第1行和第2行的名称"task_exec_config_2"
。我可以使用nextAll()
捕获所有后续行,但我不确定如何为每个行选择第二个子行那些元素。我目前的尝试是
$(obj).nextAll().$(":nth-child(2)").children().attr("name", "new_name");
但我知道这不对。
谢谢!
答案 0 :(得分:3)
将您的第二个'$'更改为'find'
$(obj).nextAll().$(":nth-child(2)").attr("name", "new_name");
到
$(obj).nextAll().find(":nth-child(2)").children().attr("name", "new_name");
答案 1 :(得分:2)
我想你只想把第n个孩子带到下一个
$(obj).nextAll(':nth-child(2)').attr("name", "new_name");
更新
离开你是原始的,我明白你想要做什么。
$(obj).nextAll().$(":nth-child(2)").attr("name", "new_name");
你需要用$.(...)
替换nextAll后的find
,并选择子输入
$(obj).nextAll().find(":nth-child(2) input").attr("name", "new_name");
在视觉上看到你在选择什么时做了一个小提琴:
https://jsfiddle.net/9oqj3z78/2/
答案 2 :(得分:0)
$("#"+obj)
.parent('tbody')
.find('tr')
.find('td:nth-child(2)')
.find('input')
.attr('name','new_name');
答案 3 :(得分:0)
这是我自己提出的解决方案。 eq()
将获得一个特定的孩子,然后我还需要选择<input>
标记才能正确更改名称。我忘了name
在<input>
上而不是<td>
,我在这个问题上犯了一个错误。
$(obj).nextAll().children().eq(1).children("input").attr("name", "new_name");