$(document).ready(function() { function saveOrders(orders) { $.post(createLink('doc','sortBookOrder'), {sort:orders}, function(data) { if(data.result != "success") { bootbox.alert(data.message); } },'json'); } function updateOrders(ele, parentOrder, orders) { var root = false; if(typeof ele === 'undefined') { ele = $('.books > dl, .books > .catalog > dl'); root = true; orders = {}; } if(typeof parentOrder === 'undefined') { parentOrder = ''; var $parent = ele.closest('.catalog:not(".catalog-empty, .drag-shadow")'); if($parent.length) { parentOrder = $parent.children('strong').find('.order').text(); } } var index = 1; ele.children('.catalog:not(".catalog-empty, .drag-shadow")').each(function() { var $this = $(this); var order = (parentOrder === '' ? '' : (parentOrder + '.')) + (index++); orders[$this.data('id')] = order; $this.children('strong').find('.order').text(order); var $dl = $this.children('dl'); if($dl.length) { updateOrders($dl, order, orders); } }); if(root) { saveOrders(orders); } }; $('.books dl').append('