Переместить атрибут к предыдущему элементу в списке - PullRequest
1 голос
/ 15 июля 2011

Как я могу переместить атрибут href серии ссылок вверх (назад) с помощью jQuery?

Это мой список:

<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 и переместить его на предыдущий, делая то же самое с предыдущим ... и затемперемещение первого до конца.

Ответы [ 3 ]

1 голос
/ 15 июля 2011
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;
});
0 голосов
/ 15 июля 2011

Не могу придумать, как бы вы сделали это с помощью встроенных методов, но цикл работает нормально

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);

Попробуй вживую

0 голосов
/ 15 июля 2011

Быстрый и непроверенный:

    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;
    }
...