我的网页上有一个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动态生成的。我想要做的是,我想在下面添加代码作为“A组”的最后一个元素:
<div class="student_name">Studen 4</div>
但是我想用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
}
});
所以这样我就已经选择了“A组”元素。但是现在我想添加“学生4”作为该组中的最后一个条目(在“学生3”下面)。 我怎么能这样做?
提前致谢。
答案 0 :(得分: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>');