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はユーティリティの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

デフォルト値でparentIDを初期化します。 var parentID ='';

次に、親を検索します。

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

あなたのアイテムはここにあり<ul class="dropenv mt">ます。parent(li)idsibling()

これを試して

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