jQuery next返回-1

时间:2012-11-19 20:26:52

标签: jquery html

你好我接下来有一些jQuery的问题。开头我的标记看起来像这样:

<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li class="active">...</li>
</ul>
<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>
<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>

在jquery中,我收集了所有'ul'元素保存在变量中,例如。 contElems。在这个变量中,我发现li与class有效,然后我尝试获得下一个elem。代码如下所示:

contElems.find('li.active').next();

当活动的li不是ul中的最后一个但是当它在ul中的最后一个时,它起作用next()返回-1。我的代码出了什么问题?我怎样才能使它工作?:)

5 个答案:

答案 0 :(得分:1)

你能做的是:

contElems.find('li.active').siblings().first();

即使匹配的ul是最后一个,你确保你得到1个兄弟...

答案 1 :(得分:0)

因为li.active之后没有下一个元素。如果您只是尝试访问li.active,请使用contElems.find('li.active')

您期待什么行为?

答案 2 :(得分:0)

如果它是最后一个,那么就没有next(),所以你会得到一个假值。就个人而言,如果我写了next(),我会让它返回null,但显然已经确定返回值-1意味着没有下一个元素。

答案 3 :(得分:0)

来自jQuery documentation

  

描述:获取匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

最后一个元素没有“紧跟兄弟姐妹”。

您可以尝试this

function getNext(contElems) {
    var next = contElems.find('li.active').next();
    if (next != undefined && next != null && next != -1 && next.length > 0)
        return next;

    var list = contElems.find('li'),
        eq = list.index(contElems.find('li.active'));

    next = list.eq(eq + 1);     return next;
}

答案 4 :(得分:0)

.next()找到下一个兄弟(同一个父母)。如果你想在下一个li(这是堂兄而不是兄弟姐妹)中找到ul,你可以这样做:

var el = contElems.find('li.active').next();
if (el.length == 0) {
    el = contElems.find('li.active').closest('ul').next().find('li:first');
}
if (el.length == 0) {
    alert("Last li is active!");
}