这个问题与此有关:How to display the new order of the parent after sorting?
我已经解决了上述问题。现在,我希望在孩子排序时获得父ID。
示例:当我将水交换到电力时,
<li id="1">
<span class="cat-title">Utilities</span>
<ul class="dropenv mt">
<li class="innerList">Electricity</li>
<li class="innerList">Water</li>
<li class="innerList">Trash</li>
<li class="innerList">Television</li>
</ul>
</li>
输出必须是,
1_Electricity
1_Water
1_Trash
1_Television
因为1是Utilities的id
以下是代码:
[.............]
var parentID;
var origColor;
$(".dropenv").sortable({
connectWith: "ul.env-data",
dropOnEmpty: true,
start: function(event, ui) {
origColor = ui.item.text();
//this is the id that produce undefined value
parentID = ui.item.parent().siblings('li').attr('id');
},
stop: function(event, ui) {
var order = [];
ui.item.closest('ul').children('li').each(function() {
order.push($(this).data('position'));
var c = $(this).text();
var z = parentID;
//if (c === origColor) {
// var z = origTitle;
//} else {
// var z = $(this).parent().siblings('.cat-title').text();
//}
$("#cl").append(z + "_" + c + "<br /\>");
});
}
});
[.............]
以上代码产生未定义的值:
undefined_Electricity
undefined_Water
undefined_Trash
undefined_Television
如何获得确切的父ID?
答案 0 :(得分:2)
尝试
parentID = ui.item.closest('li[id]').attr('id');
另一个完整的解决方案
$("#sortable").sortable({
connectWith: "ul.env-data",
dropOnEmpty: true,
stop: function(event, ui) {
var parentId = ui.item.parent().closest('li').attr('id');
// Or this
//var parentId = ui.item.closest('li[id]').attr('id');
ui.item.closest('ul').children('li').each(function() {
var $this = $(this);
var text = $this.data('text');
if(!text){
text = $this.text();
$this.data('text', text);
}
$this.text(parentId + '_' + text)
});
}
});
演示:Fiddle
答案 1 :(得分:0)
此处的商品为<ul class="dropenv mt">
..转到parent(li)
并获取id
..不需要sibling()
;
试试这个
var parentID ="";
parentID = ui.item.parent('li').attr('id');
答案 2 :(得分:0)
使用默认值初始化父ID。 var parentID ='';
搜索父母。
parentID = ui.item.parent().parent('li').attr('id');