2

我的网页中有一个 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>

..
.
.

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

<div class="student_name">Studen 4</div>

但我想使用 jQuery 添加它,因为我将这个“学生 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
    }
});

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

提前致谢。

4

1 回答 1

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>');

这段代码的作用:

  • $('.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>

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

$('#group-X .students').append('<div class="student_name"></div>');
于 2012-05-04T06:15:03.300 回答