使用 jquery 将多个列表元素的名称聚合到一个数组中
Aggregating names of multiple list elements into a single array with jquery
我有一些列表允许使用 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...
到我可以序列化的数组中。目前我正在考虑遍历 catscontainer div 的每个 UL 以获取 id 名称,并在其中进行子迭代以获取 LI id 名称。这应该 return 他们按顺序排列。通过 jquery 是否有一种特别干净的方法,或者 sortable 实际上比我经历过的更好地实现了这个功能?
更新:
我已经使用以下简单的 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);
})
});
}
我已经使用以下简单的 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);
})
});
}
我有一些列表允许使用 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...
到我可以序列化的数组中。目前我正在考虑遍历 catscontainer div 的每个 UL 以获取 id 名称,并在其中进行子迭代以获取 LI id 名称。这应该 return 他们按顺序排列。通过 jquery 是否有一种特别干净的方法,或者 sortable 实际上比我经历过的更好地实现了这个功能?
更新:
我已经使用以下简单的 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);
})
});
}
我已经使用以下简单的 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);
})
});
}