Jquery可排序(’序列化’)

是否可以通过直接调用serialize方法而不是使用回调来从jquery中的UL获取序列化的项目列表? 代码段:

var sortableLinks = $("#category_links_list_3"); var linkOrderData = $(sortableLinks).sortable('serialize'); 

category_links_list_3是UL的id

DOM结构是:

  

谢谢…

我终于得到了答案! 在调用序列化方法之前,您需要先对UL进行排序:

 var sortableLinks = $("#category_links_list_3"); $(sortableLinks).sortable(); var linkOrderData = $(sortableLinks).sortable('serialize'); 

这次linkOrderData包含category_link [] = 8&category_link [] = 9

如果serialize返回空字符串,请确保id属性包含下划线。 它们必须采用以下forms:“set_number”例如,具有id属性foo_1foo_5foo_2的3元素列表将序列化为foo[]=1&foo[]=5&foo[]=2 。 您可以使用下划线,等号或连字符来分隔集和数字。 例如foo=1foo-1foo_1都序列化为foo[]=1

以上是一个例子。 我用过它。 这就是我看到你的原因。

http://jqueryui.com/demos/sortable/#method-serialize

它会帮助你。

var formStr = $(’#container’)。serialize()

补充:这将适用于表单元素。 您也可以像这样滚动自己的序列号:

 function serializeList(container) { var str = '' var n = 0 var els = container.find('li') for (var i = 0; i < els.length; ++i) { var el = els[i] var p = el.id.lastIndexOf('_') if (p != -1) { if (str != '') str = str + '&' str = str + el.id.substring(0, p) + '[]=' + (n + 1) ++n } } return str } alert(serializeList($('#container'))) 

我能够使用拆分来使用此function。 如果您的class级中有多个下划线,则可能需要调整索引

 function serializeList(container) { var str = '' var n = 0 var els = container.find('tr') for (var i = 0; i < els.length; ++i) { var el = els[i] var p = el.id.lastIndexOf('_') **var getIdNumber = el.id.split("_");** if (p != -1) { if (str != '') str = str + '&' str = str + el.id.substring(0, p) + '[]=' + **getIdNumber[1]** ++n } } return str } 

这篇文章非常有帮助。 如果您正在寻找其他帮助,请按照以下方式使用haml-rails进行操作。 使用toArray函数略有不同。 如果使用`serialize’,则必须再次将该属性设置为’data-item =“data-item _#{id}’。

感谢Internet,了解这么多的编程解决方案。

 :css #sortable { list-style-type: none; margin: 40 20; padding: 0; width: 500; } #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; } #sortable li span { position: absolute; margin-left: -1.3em; } :javascript $(function() { $( "#sortable" ).sortable({ update: function( event, ui ) { var data = $("#sortable").sortable('toArray', {attribute: "data-item"}); // return ids in order after update //alert(JSON.stringify(data)); $.ajax({ type: "PATCH", async: true, url: "/calendar/update_order.json", data: JSON.stringify(data), dataType: 'json', contentType: 'application/json', error: function(data) { return false; }, success: function(data) { return false; } }); } }); $( "#sortable" ).disableSelection(); }); #sort_tickets %ul#sortable - @tickets.each do |ticket| %li.ui-state-default(data-item="#{ticket.id}")< %span.ui-icon.ui-icon-arrowthick-2-ns< = ticket.customer