我有div中的元素,如下所述:
<div id="container">
<div id="first_div">
<div id="comment-1" class="comment">Child 1 of first div</div>
<div id="comment-2" class="comment">Child 2 of first div</div>
<div id="comment-3" class="comment">Child 3 of first div</div>
<div id="comment-4" class="comment">Child 4 of first div</div>
</div>
<div id="second_div">
<div id="comment-5" class="comment">Child 1 of second div</div>
<div id="comment-6" class="comment">Child 2 of second div</div>
<div id="comment-7" class="comment">Child 3 of second div</div>
<div id="comment-8" class="comment">Child 4 of second div</div>
</div>
<div id="third_div">
<div id="comment-9" class="comment">Child 1 of third div</div>
<div id="comment-10" class="comment">Child 2 of third div</div>
<div id="comment-11" class="comment">Child 3 of third div</div>
<div id="comment-12" class="comment">Child 4 of third div</div>
</div>
我需要从评论ID comment-4中检索下一个元素。
$('#comment-4').next().attr('id')
给我结果为undefined。我需要将目标div作为注释id - comment-5。如何使用jquery从另一个div中检索div的下一个元素?
答案 0 :(得分:1)
试试这个:
$(function(){
$('.comment').click(function(index){
var id;
if ( $(this).is(':last-child') )
id = $(this).parent().next().children(':first').attr('id');
else
id = $(this).next().attr('id');
alert(id);
});
});
<强> Demo 强>
答案 1 :(得分:1)
function nextOf(id,cyclic){
var ids= $('div[id^=comment-]').toArray().map(function(e){return $(e).attr('id')}).sort();
var idx=ids.indexOf("comment-"+id);
if(idx!==-1){
if(ids.length> idx+1){
return $('div#'+ids[idx]);
}
else{
// it is the last div: if it is cyclic ,you may return the first
if(cyclic){
return $('div#'+ids[0]);
}
}
}else{
// no div with this id
}
}
然后:
var target=nextOf(4)
if(target){
target.html()
//--> Child 1 of second div
}
答案 2 :(得分:1)
我认为您可以使用$('.comment')
来获取您想要的所有内容,并将其保存在某些变量中,例如var arrResult = $('.comment');
。
到目前为止,您可以使用arrResult
变量选择您想要的内容。
答案 3 :(得分:0)
因为你最内心的div
有不同的父母,我会先得到你关心的所有div:
var comments = $('.comment');
接下来,如果我们可以假设您的id都按顺序编号,请获取id中的数字(假设this
引用该元素):
var index = parseInt($(this).attr('id').substr(8));
现在,评论列表中的下一个div位于评论中的该位置:
var nextDiv = comments[index];
为了好的衡量,我首先要确保设置index
:
var nextDiv;
if (index < comments.length) {
nextDiv = comments[index];
}
答案 4 :(得分:0)
您可以在案例中使用索引:
JS:
for (var index = 0; index <= 12; ++index) {
$("#comment-" + index).attr("id");
}
答案 5 :(得分:0)
为什么不定义这个:$('#comment-4').next().attr('id')
因为没有下一个元素。正如你提到的那样,你想在下一个div的孩子中定位#comment-5
,那么你可以这样做:
function giveId(el) {
var sel = el.id ? '#'+el.id : '.'+el.className;
var id = $(sel).next('div').length ? $(sel).next('div').attr('id') : $(sel).parent('div').next('div').find('> div:first').attr('id');
return id || "Either no next elem exist or next elem doesnot have any id/class.";
}
$(function () {
$('div').click(function (e) {
e.stopPropagation();
alert(giveId(this));
});
});
答案 6 :(得分:0)
假设在$comment
中收集了jQuery包装的元素,有一种方法可以解决它:
function getNextComment($comment) {
var $nextComment = $comment.next();
if ($nextComment.length) {
return $nextComment;
}
var $nextParent = $comment.parent().next();
if ($nextParent.length) {
return $nextParent.children().first();
}
return null;
}
Demo。点击一个评论 - 然后看到下一个评论突出显示。 )
基本算法在这里非常简单。首先,我们尝试检索给定元素的下一个兄弟。如果有,则立即返回。如果不是(问题就是#comment-4
的情况 - 它是其层次结构中的 last 元素),我们就会为其父级提供DOM链(在这种情况下为#first-div
),并查找其下一个兄弟(#second-div
)。如果存在,则返回其第一个子元素。如果没有,则返回null
(我们实际上可以返回一个空的jQuery对象 - $()
,但这取决于用例。
答案 7 :(得分:0)
您可以定义一个语句来检查目标ID是最后一个子项,而不是根据值返回一个函数。
var target = 'comment-4';
$('.comment').each(function(i) {
if ( $(this).attr('id') == target ) {
if ( $(this).is(':last-child') ) {
$(this).parent().next().children().first().addClass('red');
}else{
$(this).next().addClass('red');
}
}
});
答案 8 :(得分:0)
它显示未定义,因为comment-4
和comment-5
是不同父元素的子元素。方式comment-4
是first_div
的父级second_div
和comment-5
的父级。
您可以使用以下代码获取comment-5
。
$('#comment-4').parent().next().children().attr('id');
答案 9 :(得分:0)
以下是一种方法 - http://jsfiddle.net/jayblanchard/WLeSr/
$('a').click(function() {
var highlight = $('.highlight');
var currentIndex = $('.comment').index(highlight); // get the index of the currently highlighted item
$('.comment').removeClass('highlight');
var nextIndex = currentIndex + 1;
$('.comment').eq(nextIndex).addClass('highlight');
});
答案 10 :(得分:0)
$('<div id="mock" />').append($('.comment').clone()).find('#comment-4').next().attr('id')//---> comment-5
基于div具有相同的Css类.comment
答案 11 :(得分:0)
试试这个:JSFiddle(最简单的解决方案!)
$(document).ready(function(){
var currDiv = $("#comment-4"); // Try with different valies: "#comment-x"
currDivId = currDiv.prop('id');
lastDivId = currDiv.parent('div').find('.comment').last().prop('id');
if(currDivId == lastDivId){
var nextComment = currDiv.parent('div').next('div').find('.comment').prop('id');
}else{
var nextComment = currDiv.parent('div').find('.comment').next().prop('id');
}
alert(nextComment);
});