代码之家  ›  专栏  ›  技术社区  ›  miti737

使用jquery对<li>和<div>的组合进行排序

  •  0
  • miti737  · 技术社区  · 17 年前

    我是jquery的新成员。 我想对数据列表使用SortableUI。数据列表中的每一行都包含 带有序列号的文本。我已经成功地使用了可排序的用户界面。但是现在 我要在排序时移动文本而不是序列号。 这是我的示例代码。DIV将序列号显示在 每个LI的左上角。现在如果我试着拖延 实例2nd li与3rd li,然后3rd item转到2nd position as 但问题是它在第二个项目的DIV之后(应该在哪里 在第一次加载之前)。因此,根据Div的 风格…序列号1和2在第一个项目的位置重叠。

    我有什么办法可以在结束后保留这个分区吗? 排序时对应li?

    <ul id="ulSortable" class="ui-sortable" >
            <li class="Decide_Rank_Item_Li">test A</li>
            <div class="DisplayOrder">1</div>
    
            <li class="Decide_Rank_Item_Li">Test B</li>
            <div class="DisplayOrder">2</div>
    
            <li class="Decide_Rank_Item_Li">Test C</li>
            <div class="DisplayOrder">3</div>
    
            <li class="Decide_Rank_Item_Li">Test D</li>
            <div class="DisplayOrder">4</div>
    </ul>
    

    排序前的图像:

    Can't see image

    现在,如果我开始轻微移动,你可以看到包含序列号的DIV仍然显示在正确的位置

    Can't see image


    将第2项排序到第3项后

    <ul id="ulSortable" class="ui-sortable" >
            <li class="Decide_Rank_Item_Li">test A</li>
            <div class="DisplayOrder">1</div>
           <div class="DisplayOrder">2</div>
    
            <li class="Decide_Rank_Item_Li">Test C</li>
    
            <li class="Decide_Rank_Item_Li">Test B</li>
            <div class="DisplayOrder">3</div>
    
            <li class="Decide_Rank_Item_Li">Test D</li>
            <div class="DisplayOrder">4</div>
    </ul>
    

    排序后的图像:

    Can't see image

    LI和DIV的样式如下所示 风格:

    .Decide_Rank_Item_Li
    {
            position: relative;
           display: block;
            border-color: #C0C0C0;
            border-width: 1px;
            border-style: solid;
            vertical-align:  bottom;
            width: 110px;
            height: 100px;
            float:left;
            background-color: #F8F8F8;
    
    }
    
    .DisplayOrder
    {
            position: relative;
            display: block;
            float: left;
            top: 5px;
            left: -105px;
            z-index: 100;
            font-family: Arial, Helvetica, sans-serif;
            font-size: 12px;
            font-weight: bold;
            padding: 0px;
            margin: 0px;
            width: 0px;
            clear: right;
            color: #808080; 
    }
    
    3 回复  |  直到 17 年前
        1
  •  2
  •   brianpeiris    17 年前

    只需考虑一个更优雅的替代解决方案: http://jsbin.com/udina

    <html>
      <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/base/jquery-ui.css" type="text/css" />
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js"></script>
    
        <style type="text/css" media="screen">
          body { background-color: #000; font: 16px Helvetica, Arial; color: #fff; }
          li {
            width: 100px;
            height: 100px;
            float: left;
            background: #F8F8F8;
            border: 1px solid #C0C0C0;
            list-style-position: inside;
            color: #C0C0C0;
          }
          div {
            text-align: center;
            color: #C0C0C0;
            font-size: 120%;
          }
          .placeholder {
            list-style-type:decimal;
          }
        </style>
      </head>
      <body>
        <ol>
          <li><div>Test Content A</div></li>
          <li><div>Test Content B</div></li>
          <li><div>Test Content C</div></li>
          <li><div>Test Content D</div></li>
          <li><div>Test Content E</div></li>
          <li><div>Test Content F</div></li>
          <li><div>Test Content G</div></li>
          <li><div>Test Content H</div></li>
          <li><div>Test Content I</div></li>
          <li><div>Test Content J</div></li>
          <li><div>Test Content K</div></li>
          <li><div>Test Content L</div></li>
          <li><div>Test Content M</div></li>
          <li><div>Test Content N</div></li>
          <li><div>Test Content O</div></li>
          <li><div>Test Content P</div></li>
          <li><div>Test Content Q</div></li>
          <li><div>Test Content R</div></li>
          <li><div>Test Content S</div></li>
          <li><div>Test Content T</div></li>
          <li><div>Test Content U</div></li>
          <li><div>Test Content V</div></li>
          <li><div>Test Content W</div></li>
          <li><div>Test Content X</div></li>
          <li><div>Test Content Y</div></li>
          <li><div>Test Content Z</div></li>
        </ol>
        <script>
          $(function(){
            $('ol').sortable({
              helper: function(evt, el){
                return el.clone().css('color', '#F8F8F8');
              },
              placeholder: 'placeholder'
            });
          });
        </script>
      </body>
    </html>
    
        2
  •  2
  •   brianpeiris    17 年前

    我不得不更改HTML和CSS,但我认为这会达到你想要的效果。

    下面是一个托管演示: http://jsbin.com/erigu 可编辑的 http://jsbin.com/erigu/edit )

    <html>
      <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/base/jquery-ui.css" type="text/css" />
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js"></script>
    
        <style type="text/css" media="screen">
          * { margin: 0; padding: 0; }
    
          #numbers>div, #sortables>div {
            width: 110px;
            height: 100px;
            float: left;
            border: 1px solid #C0C0C0;
          }
    
          #numbers>div {
            padding-bottom: 20px;
            font: bold 12px Arial, Helvetica, sans-serif;
            color: #808080; 
            background-color: #F8F8F8;
          }
    
          #sortables>div {
            padding-top: 20px;
            text-align: center;
            color: black;
          }
    
          #sortables {
            position: absolute;
            left: 0px;
          }
        </style>
      </head>
      <body>
        <div id="numbers">
          <div>1</div>
          <div>2</div>
          <div>3</div>
          <div>4</div>
        </div>
    
        <div id="sortables">
          <div>Test A</div>
          <div>Test B</div>
          <div>Test C</div>
          <div>Test D</div>
        </div> 
    
        <script>
          $(function(){
            $('#sortables').sortable({
              /*
                The helper option allows you to customize the dragged element.
                in this case we are adding a background.
              */  
              helper: function(evt, el){
                return el.clone().css({background:'#F8F8F8'});
              }
            });
          });
        </script>  
      </body>
    </html>
    
        3
  •  0
  •   TM. Randy Simon    17 年前

    最简单的事情可能是 li / div 在另一个元素中对,并根据该元素进行排序。

    像这样的事情应该能奏效,尽管在你想怎么做的问题上有很多选择。可排序功能不需要您使用 锂 元素。

    <ul id="ulSortable" class="ui-sortable" >
        <li class="Decide_Rank_Item_Li">
            <span>test A</span>
            <div class="DisplayOrder">1</div>
        </li>
        <li class="Decide_Rank_Item_Li">
            <span>test B</span>
            <div class="DisplayOrder">2</div>
        </li>
        <li class="Decide_Rank_Item_Li">
            <span>test C</span>
            <div class="DisplayOrder">3</div>
        </li>
        <li class="Decide_Rank_Item_Li">
            <span>test D</span>
            <div class="DisplayOrder">4</div>
        </li>
    </ul>