将属性移至列表中的上一项

发布于 2024-11-24 04:30:10 字数 722 浏览 4 评论 0原文

如何使用 jQuery 将列表中一系列链接的 href 属性向上(向后)移动?

这是我的列表:

<ul id="mylist">
  <li><a href="#one">1</a></li>
  <li><a href="#two">2</a></li>
  <li><a href="#three">3</a></li>
</ul>

需要是:

<ul id="mylist">
  <li><a href="#two">1</a></li>
  <li><a href="#three">2</a></li>
  <li><a href="#one">3</a></li>
</ul>

最好在某种 $.each() 循环中执行此操作吗?里面的文本和 href 值是动态的。

$('#mylist a').each(function(i) { ??? });

不知道如何实际存储当前的 href 并将其移动到前一个,同时对前一个执行相同的操作...然后将第一个移动到末尾。

How can I move the href attribute of a series of links on a list up (backwards) with jQuery?

This is my list:

<ul id="mylist">
  <li><a href="#one">1</a></li>
  <li><a href="#two">2</a></li>
  <li><a href="#three">3</a></li>
</ul>

Would need to be:

<ul id="mylist">
  <li><a href="#two">1</a></li>
  <li><a href="#three">2</a></li>
  <li><a href="#one">3</a></li>
</ul>

Would it would be best to do this in some kind of $.each() loop? The text inside and the href values are dynamic.

$('#mylist a').each(function(i) { ??? });

Not sure how to go about actually storing the current href and moving it to the previous one while doing the same to the previous one... and then moving the first one to the end.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

楠木可依 2024-12-01 04:30:28

快速且未经测试:

    var elements = $('#mylist a');

    for (var i = 0; i < elements.length - 1; i++) {
      var t = $(elements[i + 1]).attr('href');
      $(elements[i + 1]).attr('href') = $(elements[i]).attr('href');
      $(elements[i]).attr('href') = t;
    }

Quick and untested:

    var elements = $('#mylist a');

    for (var i = 0; i < elements.length - 1; i++) {
      var t = $(elements[i + 1]).attr('href');
      $(elements[i + 1]).attr('href') = $(elements[i]).attr('href');
      $(elements[i]).attr('href') = t;
    }
倾城月光淡如水﹏ 2024-12-01 04:30:28

无法想象如何使用内置方法来做到这一点,但循环工作正常

var items = $('#mylist a'), lastItem, thisItem;
//hold onto the first href for a bit, we'll apply it to the last one once we're done
var firstHref = items.first().attr('href')
//spin through the rest
for (var i = 0; i< items.length; i++) {
    thisItem = items.eq(i);
    if (lastItem) {
        lastItem.attr('href', thisItem.attr('href'));
    }
    lastItem = thisItem;
}
items.last().attr('href', firstHref);

实时尝试

Can't think how you'd do it with the built in methods, but looping works OK

var items = $('#mylist a'), lastItem, thisItem;
//hold onto the first href for a bit, we'll apply it to the last one once we're done
var firstHref = items.first().attr('href')
//spin through the rest
for (var i = 0; i< items.length; i++) {
    thisItem = items.eq(i);
    if (lastItem) {
        lastItem.attr('href', thisItem.attr('href'));
    }
    lastItem = thisItem;
}
items.last().attr('href', firstHref);

Try it live

梅倚清风 2024-12-01 04:30:26
jQuery.fn.reverse = [].reverse;

var $li = $('#mylist li a');
var prevhref = $li.first().attr('href');
$li.reverse().each(function() {
    var $this = $(this);
    var nexthref = $this.attr('href');
    $this.attr('href', prevhref);
    prevhref = nexthref;
});

类似,螨虫更快:

jQuery.fn.reverse = [].reverse;

var $li = $('#mylist li a');
var prevhref = $li[0].getAttribute('href');
$li.reverse().each(function() {
    var nexthref = this.getAttribute('href');
    this.setAttribute('href', prevhref);
    prevhref = nexthref;
});
jQuery.fn.reverse = [].reverse;

var $li = $('#mylist li a');
var prevhref = $li.first().attr('href');
$li.reverse().each(function() {
    var $this = $(this);
    var nexthref = $this.attr('href');
    $this.attr('href', prevhref);
    prevhref = nexthref;
});

Similar, a mite faster:

jQuery.fn.reverse = [].reverse;

var $li = $('#mylist li a');
var prevhref = $li[0].getAttribute('href');
$li.reverse().each(function() {
    var nexthref = this.getAttribute('href');
    this.setAttribute('href', prevhref);
    prevhref = nexthref;
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文