Jquery 每次导航顺序,未定义的错误
Jquery each navigation order, undefined error
我想将我的导航与 jQuery 分开,但每个 returns 循环中的某些元素都未定义,
它看起来像这样:
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
</ul>
这应该看起来像这样,第一个元素从最后一个元素获取上一个 ID,下一个元素从列表中的下一个元素获取下一个 ID。
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="105">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="101">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="104">Next</a>
<a href="#" data-prev="102">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="103">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="100">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
示例:https://jsfiddle.net/z0uyfmx6
控制台:
101next
undefinedprev
undefinednext
100prev
103next
undefinedprev
undefinednext
102prev
105next
undefinedprev
undefinednext
104prev
这是因为 next/prev
方法将只查找 previous/next 兄弟元素。因此在每个 ul
中,第一个 li
不会有前一个和最后一个下一个兄弟元素,因此它们将打印 undefined
.
相反,您可以进行基于索引的查找,例如
jQuery(function($) {
var pList = $('.list-item');
pList.each(function(i, e) {
var index = pList.index(this);
var next = pList.eq(index + 1).attr('data-post-id');
var prev = index == 0 ? undefined : pList.eq(index - 1).attr('data-post-id');
snippet.log(prev + ':' + $(this).attr('data-post-id') + ':' + next)
});
});
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
</ul>
我想将我的导航与 jQuery 分开,但每个 returns 循环中的某些元素都未定义, 它看起来像这样:
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
</ul>
这应该看起来像这样,第一个元素从最后一个元素获取上一个 ID,下一个元素从列表中的下一个元素获取下一个 ID。
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="105">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="101">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="104">Next</a>
<a href="#" data-prev="102">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="103">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="100">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
示例:https://jsfiddle.net/z0uyfmx6
控制台:
101next
undefinedprev
undefinednext
100prev
103next
undefinedprev
undefinednext
102prev
105next
undefinedprev
undefinednext
104prev
这是因为 next/prev
方法将只查找 previous/next 兄弟元素。因此在每个 ul
中,第一个 li
不会有前一个和最后一个下一个兄弟元素,因此它们将打印 undefined
.
相反,您可以进行基于索引的查找,例如
jQuery(function($) {
var pList = $('.list-item');
pList.each(function(i, e) {
var index = pList.index(this);
var next = pList.eq(index + 1).attr('data-post-id');
var prev = index == 0 ? undefined : pList.eq(index - 1).attr('data-post-id');
snippet.log(prev + ':' + $(this).attr('data-post-id') + ':' + next)
});
});
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
<li class="list-item" data-post-id="100">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
<li class="list-item" data-post-id="101">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="102">
<a href="#" data-next="102">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
<li class="list-item" data-post-id="103">
<a href="#" data-next="103">Next</a>
<a href="#" data-prev="100">Prev</a>
</li>
</ul>
<ul class="list">
<li class="list-item" data-post-id="104">
<a href="#" data-next="105">Next</a>
<a href="#" data-prev="104">Prev</a>
</li>
<li class="list-item" data-post-id="105">
<a href="#" data-next="101">Next</a>
<a href="#" data-prev="106">Prev</a>
</li>
</ul>