如何在子进程排序时获取父ID

时间:2013-03-15 08:38:18

标签: javascript jquery

这个问题与此有关: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?

3 个答案:

答案 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');