简体   繁体   English

Jquery 遍历属性值

[英]Jquery looping through attribute values

In Jquery I'm attempting to increment the attribute value of 5 list items such that their position in the list changes on the click of a forward and backward button, but does not exceed the 5 possible positions, or become a negative integer.在 Jquery 中,我试图增加 5 个列表项的属性值,以便它们在列表中的 position 在单击前进和后退按钮时发生变化,但不会超过 5 个可能的位置,或者变为负值 integer。

What I was trying to write was a function that checks for values < 5, and increments them by 1, and then decrements 5 by 4 to make it a position of 1, when #forward is clicked.我试图编写的是一个 function,它检查值 < 5,并将它们递增 1,然后将 5 递减 4,使其成为 position of 1,当单击#forward 时。 Similarly, for clicking #backward, a function would check for values > 1 and decrement them by 1, and then increment 1 by 4 to make it a position of 5, essentially allowing for a control to loop the 5 list items through the 5 positions.类似地,对于单击#backward,function 将检查值 > 1 并将它们递减 1,然后将 1 递增 4 使其成为 position of 5,基本上允许控件通过 5 个位置循环 5 个列表项.

I'm using the following script:我正在使用以下脚本:

//forward
$("#forward").click(function() {
  if ( $('li').attr('position') < 5 ) {
    $('li').attr('position', function(_, v) {
      return Number(v) + 1;
    });
  } else if ( $('li').attr('position') == 5 ) {
    $('li').attr('position', function(_, v) {
      return Number(v) - 4;
    });
  }
});
//backward
$("#backward").click(function() {
  if ( $('li').attr('position') > 1 ) {
    $('li').attr('position', function(_, v) {
      return Number(v) - 1;
    });
  } else if ( $('li').attr('position') == 1 ) {
    $('li').attr('position', function(_, v) {
      return Number(v) + 4;
    });
  }
});

You need to swap the position of the if statement and the attr function around, like this:您需要交换if语句的 position 和attr function,如下所示:

$("#forward").click(function() {
  $('li').attr('position', function(_, v) {
    if ($(this).attr('position') < 5) {
      return Number(v) + 1;
    } else if ($(this).attr('position') == 5) {
      return Number(v) - 4;
    }
  });
});
//backward
$("#backward").click(function() {
  $('li').attr('position', function(_, v) {
    if ($(this).attr('position') > 1) {
      return Number(v) - 1;
    } else if ($(this).attr('position') == 5) {
      return Number(v) + 4;
    }
  });
});

After swappering the if and attr, then we will change $('li').attr('position') < 5 to $(this).attr('position') < 5交换 if 和 attr 之后,我们将把$('li').attr('position') < 5更改$(this).attr('position') < 5

Demo演示

 $("#forward").click(function() { $('li').attr('position', function(_, v) { if ($(this).attr('position') < 5) { return Number(v) + 1; } else if ($(this).attr('position') == 5) { return Number(v) - 4; } }); }); //backward $("#backward").click(function() { $('li').attr('position', function(_, v) { if ($(this).attr('position') > 1) { return Number(v) - 1; } else if ($(this).attr('position') == 5) { return Number(v) + 4; } }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="carousel-container"> <ul class="carousel"> <li id="1" class="story" position="1">1</li> <li id="2" class="story" position="5">2</li> <li id="3" class="story" position="4">3</li> <li id="4" class="story" position="2">4</li> <li id="5" class="story" position="3">5</li> </ul> </div> <nav class="control"> <ul> <li id="forward"><a href="#">forward<i class="fa-solid fa-caret-right"></i></a></li> <li id="backward"><a href="#">backward<i class="fa-solid fa-caret-left"></i></a></li> </ul> </nav>

If you only want to change the position attribute please try this.如果您只想更改 position 属性,请尝试此操作。

 $(document).ready(function () { $("#forward").on("click", function(){ $('#list li').each(function(index, item){ const pos = parseInt($(this).attr('position')); const newPos = pos < 5? pos+1: 1; console.log(pos, newPos); $(this).attr('position', newPos);; }); }); $("#backward").on("click", function(){ $('#list li').each(function(index, item){ const pos = parseInt($(this).attr('position')); const newPos = pos > 1? pos-1: 5; console.log(pos, newPos) $(this).attr('position', newPos); }); }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="backward">backward</div> <ul id="list"> <li position="1">1</li> <li position="2">2</li> <li position="3">3</li> <li position="4">4</li> <li position="5">5</li> </ul> <div id="forward">forward</div>

https://jsfiddle.net/b62uzqkf/ https://jsfiddle.net/b62uzqkf/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM