如何选择每个后续兄弟姐妹的第n个孩子

时间:2015-06-03 19:59:51

标签: jquery

我有一些看起来像这样的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");

但我知道这不对。

谢谢!

4 个答案:

答案 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");