Перемещение div вверх и вниз Изменение ID Num с помощью Javascript / Jquery - PullRequest
1 голос
/ 05 февраля 2020

Я хочу иметь возможность изменять ID при перемещении div вверх и вниз, чтобы затем я мог отправить их числа в MySQLi ...

Таким образом, в основном с

<div id="1" class='col1'>1</div>
<div id="2" class='col2'>2</div>
<div id="3" class='col3'>3</div>
<div id="4" class='col4'>4</div>
<div id="5" class='col5'>5</div>

на

<div id="5" class='col1'>1</div>
<div id="2" class='col2'>2</div>
<div id="4" class='col3'>3</div>
<div id="1" class='col4'>4</div>
<div id="3" class='col5'>5</div>

или что-то в этом роде ...

HTML

    <div id='items'>
                <div id="1" class='col1'>1</div>
                <div id="2" class='col2'>2</div>
                <div id="3" class='col3'>3</div>
                <div id="4" class='col4'>4</div>
                <div id="5" class='col5'>5</div>

            </div>

    <a href="#" id="up">Up</a>
    <a href="#" id="down">Down</a>

JS

    $(document).ready(function(){
        var selected=0;

         var itemlist = $('#items');
        var len=$(itemlist).children().length; 

        $("#items div").click(function(){
            selected= $(this).index();
            alert("Selected item is " + $(this).text());
        });


         $("#up").click(function(e){
           e.preventDefault();
           if(selected>0)
            {
                jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
                selected=selected-1;
            }
        });

         $("#down").click(function(e){
             e.preventDefault();
            if(selected < len)
            {
                jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
                selected=selected+1;
            }
        });




    });

CSS

    #items div{
      width:100px;
      height:20px;
      border:1px solid #000;
      margin-top:2px;
      text-align:center
    }
    div .col1{
      background-color:#000;
      color:#fff
    }
    .col2{
      background-color:#0f0;
    }
    .col3{
      background-color:#00f;
      color:#fff
    }
    .col4{
      background-color:#f00;
      color:#fff
    }
    .col5{
      background-color:#ff0;

    }

Все движется, но каким-то образом мне нужно, чтобы это изменило ID, если это возможно, чтобы потом сортировать в таком порядке.

Возможно ли это? Если так, то кто-нибудь может мне помочь, пожалуйста.

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете взять этот список элементов или песен в вашем случае, а затем перебирать каждый элемент, когда вы меняете позицию элемента. Таким образом, вы сохраняете ID элементов, но у вас есть точный номер сортировки для хранения на стороне сервера, когда это необходимо. В JS вы можете сделать что-то вроде этого:

$(document).ready(function(){
        var selected=0;

        var itemlist = $('#items');
        var len=$(itemlist).children().length; 

        $("#items div").click(function(){
            selected= $(this).index();
            alert("Selected item is " + $(this).text());
        });


         $("#up").click(function(e){
           e.preventDefault();
           if(selected>0)
            {
                jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
                selected=selected-1;
                changeSortOrder();
            }
        });

         $("#down").click(function(e){
             e.preventDefault();
            if(selected < len)
            {
                jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
                jQuery($(itemlist).children().eq(selected-1)).attr('data-sort', selected + 1);
                selected=selected+1;
                changeSortOrder();
            }
        });
    });

    function changeSortOrder() {
      var listItems = $('#items').children();

      for (var item in listItems) {
        listItems[item].setAttribute('data-sort', parseInt(item) + 1);
      }
    }

С добавленной функцией, которая является основным изъятием.

function changeSortOrder() {
    var listItems = $('#items').children();

    for (var item in listItems) {
        listItems[item].setAttribute('data-sort', parseInt(item) + 1);
    }
}

То, что происходит здесь, это то, что вы захватываете все эти элементы в вашем списке, затем переназначьте их сортировку, повторяя каждый из них. Поэтому, когда вы перемещаете элемент 1 вниз на позицию два, вы видите, что элемент 2 теперь имеет позицию сортировки, равную единице, а не 2, и т. Д. Для каждого элемента в списке.

Например, вот что HTML будет выглядеть после выбора элемента 1 и нажатия -> вниз:

<div id="2" sort="1" class='col'>2</div>
<div id="1" sort="2" class='col1'>1</div>
<div id="3" sort="3" class='col3'>3</div>
<div id="4" sort="4" class='col4'>4</div>
<div id="5" sort="5"  class='col5'>5</div>

См. здесь JS скрипку для рабочего примера, чтобы лучше проиллюстрировать это.

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