0

这个问题与此有关:排序后如何显示父级的新顺序?

我已经解决了上面的问题。现在是我想在孩子排序时获取父 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?

4

3 回答 3

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)
        });
    }
});

演示:小提琴

于 2013-03-15T08:44:14.547 回答
0

你这里的物品是<ul class="dropenv mt">..parent(li)去拿id..不需要sibling();

试试这个

var parentID ="";
parentID = ui.item.parent('li').attr('id');
于 2013-03-15T08:41:12.753 回答
0

使用默认值初始化 parentID。 var parentID ='';

然后搜索父级。

 parentID = ui.item.parent().parent('li').attr('id');
于 2013-03-15T08:42:11.527 回答