Jquery 列表顺序的逻辑问题

Jquery 列表顺序的逻辑问题,jquery,Jquery,我想我错过了一些逻辑上的见解。这看起来很容易,但我就是看不出来 我有一个列表,想看看在单击的项目之前和/或之后是否有列表项目。这是密码 <script> [..] $("a").click(function(event){ var parentEl = $(this).closest("ul"); var currPosition = $(this).parent().prevAll().length + 1; var totalItems = $("#"+$(parentE

我想我错过了一些逻辑上的见解。这看起来很容易,但我就是看不出来

我有一个列表,想看看在单击的项目之前和/或之后是否有列表项目。这是密码


<script>
[..]
$("a").click(function(event){
 var parentEl = $(this).closest("ul");
 var currPosition = $(this).parent().prevAll().length + 1;
 var totalItems = $("#"+$(parentEl).attr("id")+" li").length;

 if(currPosition == totalItems){ alert("Previous and Next"); }
 if(currPosition <= totalItems){ alert("Next"); }
 if(currPosition >= totalItems){ alert("Previous"); } 
[..]
</script>

[..]

<ul id="listOne">
 <li><a>Text 1</a></li>
 <li><a>Text 2</a></li>
 <li><a>Text 3</a></li>
 <li><a>Text 4</a></li>
</ul>

[..]
$(“a”)。单击(函数(事件){
var parentEl=$(此);
var currPosition=$(this.parent().prevAll().length+1;
var totalItems=$(“#”+$(parentEl).attr(“id”)+“li”).length;
如果(currPosition==totalItems){alert(“Previous and Next”);}
如果(currPosition=totalItems){alert(“Previous”);}
[..]
[..]
  • 文本1
  • 文本2
  • 文本3
  • 文本4
上面的代码几乎只在我点击最后一个项目时起作用,所有内容都会得到提醒。。 我只想知道单击的列表项上是否有上一个、下一个或两个观点

您可以使用如下方式进行检查:

$("a").click(function(event){
  var pCount = $(this).closest('li').prevAll().length, //how many previous
      nCount = $(this).closest('li').nextAll().length; //how many after
  if(pCount > 0 && nCount > 0){ alert("Previous and Next"); }
  else if(nCount > 0){ alert("Next"); }
  else if(pCount > 0){ alert("Previous"); } 
});
if (li.is(":first-child")) {
  // first
} else if (li.is(":last-child")) {
  // last
} else {
  // in the middle
}

,当然,您可以将其缩短很多,但为了说明计数的来源,此方法不仅可以告诉您是否存在类似或将要出现的先前/后续元素,而且还可以告诉您有多少元素,如果这很重要的话。

使您的生活变得更轻松,并可用于查找某事物的当前位置

$("a").click(function() {
  var li = $(this).closest("li");
  var items = li.parent().children();
  var currPosition = items.index(li);
  var totalItems = items.length();
  if (currPosition == 0) {
    // first
  } else if (currPosition == totalItems.length - 1) {
    // last
  } else {
    // middle
  }
});
或者,您可以执行如下测试:

$("a").click(function(event){
  var pCount = $(this).closest('li').prevAll().length, //how many previous
      nCount = $(this).closest('li').nextAll().length; //how many after
  if(pCount > 0 && nCount > 0){ alert("Previous and Next"); }
  else if(nCount > 0){ alert("Next"); }
  else if(pCount > 0){ alert("Previous"); } 
});
if (li.is(":first-child")) {
  // first
} else if (li.is(":last-child")) {
  // last
} else {
  // in the middle
}
快速修复:

if(currPosition == totalItems){ 
  alert("Previous"); 
} else if(currPosition == 1){ 
  alert("Next"); 
} else {
  alert("Previous and Next");
}

只需检查其项目是否在父li之前或之后

$("a").click(function(){
      var itemsBefore = ($(this).parent().prev().length>0)
      var itemsAfter = ($(this).parent().next().length>0)
      if(itemsBefore && itemsAfter) alert("Previous and next");
      else if(itemsBefore) alert("Previous");
      else alert("Next");
  });

在这里工作-->

也可以做
li.index()
(假设jQuery 1.4或更高版本)。非常简单!我就知道!谢谢!