从左到右或从右到左移动列表项更新数据属性

时间:2015-04-10 02:58:10

标签: javascript jquery

这是参考“重新排序列表元素 - jQuery?”的问题。已经问过here

现在我想进一步前进。我想做什么,我只是想为电子商务建立一个比较产品项目。

所以,在这里我找到重新排序列表项。 但是我想在每个名为“Left”和“Right”的列表项中添加两个按钮,尽管这里我只显示了一个“Right”。单击“向右”按钮时,“数据排序”值将更新为+1,列表将向右移动,即在下一个位置,下一个定位列表项将重新排序到它的先前位置。简而言之,就是李物品的并排运动。

所以HTML如下:[只是添加了按钮]

<ul id="ulName">
<li data-sortby="1">three <a href="javascript:;" class="rGth" >Right</a></li>
<li data-sortby="2">one<a href="javascript:;" class="rGth" >Right</a> </li>
<li data-sortby="3">two<a href="javascript:;" class="rGth" >Right</a> </li>
<li data-sortby="4">four<a href="javascript:;" class="rGth" >Right</a> </li>

脚本是:

$(document).ready(function() {

var ul = $('ul#ulName'),
    li = ul.children('li');


    li.detach().sort(function(a,b) {
        return $(a).data('sortby') - $(b).data('sortby');


    });


    ul.append(li);

   $('.rGth').each(function(){
          var thisli = $(this);
          var parent = thisli.parent('li');
          var right =  parent.data('sortby') + 1;
          var left = parent.data('sortby') - 1;
          thisli.click(function(){
          //alert(parent.data('sortby')+1);
         alert(right);
         alert(left);
          parent.data('sortby', right);
         parent.next().data('sortby',left);

        });
    });

}); 

但我发现“data-”属性没有更新。 任何人都可以帮我解决我的错误吗?

我编辑了我的代码。它提供了数据属性值的警报,但我看到它没有改变。我知道我在做一个愚蠢的混乱。有人可以帮忙吗? 这是Fiddle

1 个答案:

答案 0 :(得分:0)

我终于改变了我的代码并取得了我正在寻找的结果。这是最终的代码:

$('.down').click(function(){
            var cur = $(this).parent(),
                next= $(this).parent().next();


                if(next.length > 0 )    {
                                 var moveDown = (cur.offset().left + cur.outerWidth()) - (next.offset().left + next.outerWidth()),
                     moveUp = (next.offset().left + next.outerWidth()) - (cur.offset().left + cur.outerWidth());

                        cur.css('position', 'relative');
                        cur.animate({'left':-moveDown});

                        next.css('position', 'relative');
                        next.animate({'left':-moveUp},function(){
                                cur.detach().insertAfter(next);
                                next.detach().insertBefore(cur);

                             cur.css({'position': 'static', 'top': 0});
                             next.css({'position': 'static', 'top': 0}); 
                        });


                }
                        //cur.detach().insertAfter(next);
                        //next.detach().insertBefore(cur);



        });

        $('.up').click(function(){
            var cur = $(this).parent(),
                prev= $(this).parent().prev();


            if(prev.length > 0) {
                            var moveUp = (cur.offset().left + cur.outerWidth()) - (prev.offset().left + prev.outerWidth()),
                moveDown = (prev.offset().left + prev.outerWidth()) - (cur.offset().left + cur.outerWidth());
                        cur.css('position', 'relative');
                        cur.animate({'left':moveDown});

                        prev.css('position', 'relative');
                        prev.animate({'left':moveUp},function(){
                                cur.detach().insertBefore(prev);
                                prev.detach().insertAfter(cur);

                             cur.css({'position': 'relative', 'left': 0});
                             prev.css({'position': 'relative', 'left': 0}); 
                        });
                }
        });