Сортировать родного брата <div>с jQuery - PullRequest
6 голосов
/ 08 мая 2011

Я бьюсь головой о проблеме, которая больше связана с математикой 2-го класса, чем с программированием.Вот так: четыре <div> элемента расположены один за другим горизонтально.Когда вы нажимаете один, скрипт размещает его впереди.Вы нажимаете на другой, и он также находится впереди, и т. Д. Вы получаете изображение.Теперь я хотел бы отсортировать оставшиеся <div> элементы (все, кроме первого), используя оригинальный порядок.

Возможно, эта картинка прояснит ситуацию:

enter image description here

После шага # 3, C должен быть помещен после B, поэтому он должен выглядеть следующим образом: D A B C.

Вот пример кода:

<html>
  <head>
    <title>mixit</title>
    <style type="text/css">
      .insidebox{
      width: 50px;
      height: 50px;
      line-height: 50px;
      margin: 0 0 0 20px;
      text-align: center;
      float: left;
      border: black solid 3px;
      font-family: sans-serif;
      cursor: pointer;
      }
    </style>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script type="text/javascript">

    </script>
  </head>
  <body>
    <div id="container">
      <div id="a" class="insidebox">A</div>
      <div id="b" class="insidebox">B</div>
      <div id="c" class="insidebox">C</div>
      <div id="d" class="insidebox">D</div>
    </div>
  </body>
</html>

Теперь я понимаю, что могу использовать .insertAfter() для размещения элемента впереди, но как мне решить проблему с сортировкой?Ключевое слово: начальный порядок , а не алфавитный порядок.Буквы и ящики даны только для иллюстрации.

Ответы [ 3 ]

5 голосов
/ 08 мая 2011

Это должно делать то, что вы хотите.

var $initial = $('.insidebox');
$('.insidebox').click(function(){
    var $this = $(this);

    $this.parent()
         .prepend($this)
         .append( $initial.not(this) );
});

Вы сохраняете исходный список и при каждом клике повторно добавляете его (, исключая текущий * )

демо http://jsfiddle.net/gaby/Dyafx/


обновление

Ад ... вам даже не нужно добавлять текущий элемент .. при добавлениив остальном они пойдут после того, как нажали один ..

var $initial = $('.insidebox');
$('.insidebox').click(function(){
    $(this).parent()
         .append( $initial.not(this) );
});

демо http://jsfiddle.net/gaby/Dyafx/1/

1 голос
/ 08 мая 2011

Сохранить начальный заказ в виде массива. Затем сортируйте по индексу массива - первый (A) будет иметь индекс массива 1 и т. Д.

0 голосов
/ 08 мая 2011

Сделайте это:

$(document).ready(function(){
    $("#container div").click(function(){
       $(this).prependTo($(this).parent());
    });
});

ура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...