如何更改jquery ui可排序返回的内容

How to change what jquery ui sortable return?

本文关键字:返回 排序 何更改 jquery ui      更新时间:2023-09-26

我有一个CMS,让我的用户通过jquery ui排序菜单。

jquery ui返回什么?

我使用了以下代码:

JavaScript:

$( "#menuUl" ).sortable({
    update: function (event, ui) {
        var data = $(this).sortable('serialize');
        console.log(data);
     }
})
html:

echo '<ul id="menuUl">';
    $i=0;
    while($row=mysql_fetch_array($result_select_menu)){
        $i++;
        echo '<li name="asdsad" id="li-'.$row['menu_id'].'" class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>'.$row['title'].'<input type="hidden" value="" id="hidden-'.$row['menu_id'].'" class="hiddenClass" name="id['.$row['menu_id'].']"/></li>
        ';    
    }
    echo '</ul>';

javascript是这么写的:

李[]= 2,李[]= 1,李[]= 3,李[]= 4,李[]= 5,李[]= 6,李[]= 7,李[]= 8,李[]= 9,李[]= 10,李[]= 11,李[]= 12,李[]= 13,李[]= 14

我需要知道哪个li有哪个数字。:

李[1]= 2,李[2]= 1,李[3]= 3,李[4]= 4,李[5]= 5,李[6]= 6,李[7]= 7,李[8]= 8,李[9]= 9,李[10]= 10,李[11]= 11,李[12]= 12,李[13]= 13,李[14]= 14

我的另一个问题是:我可以改变什么序列化返回,例如序列化返回li[]=1,但我需要说li[1]=1

有一些方法可以做到这一点,我认为您应该使用序列化,然后通过Ajax将其发送到服务器端页面。

这是一个很好的答案,你写订单到数据库

开箱操作:不,你不能这样做。sortable.serialize()返回一个按照$.param()规范格式化的字符串。最接近开箱即用的方法是sortable.toArray()JSON.stringify()JSON.parse()

至于手动操作,因为这是有序的,并且只包含li s,将其转换为您说您想要的格式并不困难:

var data = $(this).sortable('serialize');
var i = 0;
while(data.indexOf("li[]") !== -1) {
    data = data.replace(/li'[']/, "li[" + (i++) + "]");
}

将第一个字符串转换为

li[0]=2&li[1]=1&li[2]=3&li[3]=4&li[4]=5&li[5]=6&li[6]=7&li[7]=8&li[8]=9&li[9]=10&li[10]=11&li[11]=12&li[12]=13&li[13]=14

请记住,您需要自己维护这个,并且它只适用于您绝对需要保留数组索引的情况。