如何使用jQuery查找具有特定类名的每个下一个元素?

asl*_*tor 2 javascript php jquery

我的网页上有一个html结构,如下所示:

<div class="group_name">Group A</div>
<div class="student_name">Studen 1</div>
<div class="student_name">Studen 2</div>
<div class="student_name">Studen 3</div>

<div class="group_name">Group B</div>
<div class="student_name">Studen 1</div>
<div class="student_name">Studen 2</div>
<div class="student_name">Studen 3</div>

..
.
.
Run Code Online (Sandbox Code Playgroud)

现在这个结构是使用PHP动态生成的.我想要做的是,我想在下面添加代码作为"A组"的最后一个元素:

<div class="student_name">Studen 4</div>
Run Code Online (Sandbox Code Playgroud)

但我想使用jQuery添加它,因为我将这个"Student 4"记录作为Ajax响应字符串.因此,div将根据组名添加.目前我已将组名的静态值用作"组A".所以Javascript将如下所示:

$(".group_name").each(function(index){
    var group_name = $(this).text();

    if(group_name=='Group A'){
          // Add Student 4 to last position of this group
    }
});
Run Code Online (Sandbox Code Playgroud)

所以这样我就已经选择了"A组"元素.但是现在我想添加"学生4"作为该组中的最后一个条目(在"学生3"下面).我怎样才能做到这一点 ?

提前致谢.

Thi*_*ter 5

$('.group_name').filter(function() {
    return $(this).text() == 'Group A';
}).nextUntil('.group_name').filter('.student_name').last().after('<div class="student_name">Student X</div>');
Run Code Online (Sandbox Code Playgroud)

这段代码的作用:

  • $('.group_name') 选择所有组
  • .filter(...)使用正确的组名将其减少为元素.我没有使用:contains(),因为它将执行子串匹配而不是完全匹配.
  • .nextUntil('.group_name') 以下所有不属于新组的兄弟姐妹
  • .filter('.student_name') 删除所有不是学生元素的元素 - 以防你的DOM结构严重到足以使其成为必要
  • .last() 将它减少到最后一个 - 应该插入新的一个之后的地方
  • .after(...) 在该元素后插入新条目.

这是一个演示:http://jsfiddle.net/ThiefMaster/5UHgC/


请注意,通过更改您的结构,您可以使这更容易,更清晰,更结构化:

<div class="group" id="group-1">
    <div class="group_name">...</div>
    <div class="students">
        <div class="student_name"></div>
        <div class="student_name"></div>
        <div class="student_name"></div>
    </div>
</div>

<div class="group" id="group-2">
    <div class="group_name">...</div>
    <div class="students">
        <div class="student_name"></div>
        <div class="student_name"></div>
        <div class="student_name"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地使用这个:

$('#group-X .students').append('<div class="student_name"></div>');
Run Code Online (Sandbox Code Playgroud)