-2

你好,接下来我对 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”元素,例如。问题。在这个变量中,我找到了类活动的 li,然后我尝试获取下一个元素。代码如下所示:

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

当活动 li 不在 ul 中最后但在 ul 中最后时 next() 返回 -1 时,它可以工作。我的代码有什么问题?我怎样才能让它工作?:)

4

5 回答 5

1

你可以做的是:

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

这样,即使匹配ul的是最后一个,您也可以确保获得 1 个兄弟姐妹...

于 2012-11-19T20:30:46.117 回答
0

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

你期待什么行为?

于 2012-11-19T20:29:09.087 回答
0

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

于 2012-11-19T20:29:34.040 回答
0

来自jQuery 文档

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

最后一个元素没有“紧随其后的兄弟”。

你可以试试这个

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;
}
于 2012-11-19T20:29:55.503 回答
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!");
}
于 2012-11-19T20:31:00.683 回答