我有一些列表,我允许使用sortable.js重新排列,我需要在拖动完成时创建一个排序顺序数组。 HTML如下:
<div id="catscontainer">
<div id="parentcat1" class="parentcatcontainer">
<h4 class="parentcathead">Parent Category One</h4>
<ul class="subcatlist" id="ul-parentcat1">
<li id="parentcat1-subcat1">Sub Category One</li>
<li id="parentcat1-subcat2">Sub Category Two</li>
<li id="parentcat1-subcat3">Sub Category Three</li>
</ul>
</div>
<div id="parentcat2" class="parentcatcontainer">
<h4 class="parentcathead">Parent Category Two</h4>
<ul class="subcatlist" id="ul-parentcat2">
<li id="parentcat2-subcat1">Sub Category One</li>
<li id="parentcat2-subcat2">Sub Category Two</li>
<li id="parentcat2-subcat3">Sub Category Three</li>
</ul>
</div>
</div>
我一直在使用以下可排序代码:
var sortySubCats = Sortable.create(el, {
group: 'titles',
animation: 150,
dataIdAttr: 'id',
onUpdate: function( /**Event*/ evt) {
var orderListSub = sortySubCats.toArray();
}
}
这导致了一个数组orderListSub
,它只输出与之交互的父类别中的项目列表。这很好,但不适合我的目的。在mySQL中,我存储了整个层次结构的数组的序列化版本。这个结构对于这个问题来说是多余的,但我确实需要在每次拖动完成后按顺序输出以下内容:
Parent Category ID
> Sub Category ID
> Sub Category ID
> Sub Category ID
Parent Category ID
> Sub Category ID
> Sub Category ID
> Sub Category ID
etc...
进入我可以序列化的数组。目前我正在寻找通过catcontainer div的每个UL迭代id名称,并在其中为LI id名称进行子迭代。这应该按顺序返回。有没有一种特别干净的方法通过jquery这样做,或者实际上可以实现比我经历过的更好的实现这个功能吗?
更新
我已经使用以下简单的jquery来按照与拖动后的外观匹配的顺序捕获列表的父元素和子元素的ID。似乎是最直接的方式,我可以添加一些代码将其转换为我需要的数组。如果没有更好的建议,我会将其添加为答案。
function catsToArrayJSON() { // called after drag complete
$("#catscontainer ul").each(function () {
console.log('Parent is: ' + this.id);
$(this).children("li").each(function () {
console.log('Child is: ' + this.id);
})
});
}
答案 0 :(得分:0)
我已经使用以下简单的jquery来按照与拖动后的外观匹配的顺序捕获列表的父元素和子元素的ID。似乎是最直接的方式,我可以添加更多代码将其转换为我需要的数组。
function catsToArrayJSON() { // called after drag complete
$("#catscontainer ul").each(function () {
console.log('Parent is: ' + this.id);
$(this).children("li").each(function () {
console.log('Child is: ' + this.id);
})
});
}