Javascript 使用jquery递归函数不更新每个变量的值

Javascript 使用jquery递归函数不更新每个变量的值,javascript,jquery,recursion,Javascript,Jquery,Recursion,我使用了以下格式的HTML: <div class="propBasic containerForReordering"> <ul itemid="WZ_VS_Test_msgSection" class="sortable ui-sortable"> <li itemid="WZ_VS_Test_Top" class="liSortable ui-sortable-handle">WZ_VS_Test_Top

我使用了以下格式的HTML:

<div class="propBasic containerForReordering">
    <ul itemid="WZ_VS_Test_msgSection" class="sortable ui-sortable">
        <li itemid="WZ_VS_Test_Top" class="liSortable ui-sortable-handle">WZ_VS_Test_Top
            <ul itemid="WZ_VS_Test_Top" class="sortable ui-sortable">
                <li itemid="WZ_VS_Test_Top.First" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.First
                    <ul itemid="WZ_VS_Test_Top.First" class="sortable ui-sortable">
                        <li itemid="WZ_VS_Test_Top.First.1" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.First.1
                            <ul itemid="WZ_VS_Test_Top.First.1" class="sortable ui-sortable">
                                <li itemid="" class="liSortable ui-sortable-handle">{{Drop Here}}</li>
                            </ul>
                        </li>
                        <li itemid="WZ_VS_Test_Top.First.2" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.First.2
                            <ul itemid="WZ_VS_Test_Top.First.2" class="sortable ui-sortable">
                                <li itemid="" class="liSortable ui-sortable-handle">{{Drop Here}}</li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li itemid="WZ_VS_Test_Top.Second" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.Second
                    <ul itemid="WZ_VS_Test_Top.Second" class="sortable ui-sortable">
                        <li itemid="WZ_VS_Test_Top.Second.1" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.Second.1
                            <ul itemid="WZ_VS_Test_Top.Second.1" class="sortable ui-sortable">
                                <li itemid="" class="liSortable ui-sortable-handle">{{Drop Here}}</li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li itemid="WZ_VS_Test_Top.Second.2" class="liSortable ui-sortable-handle">WZ_VS_Test_Top.Second.2
                    <ul itemid="WZ_VS_Test_Top.Second.2" class="sortable ui-sortable">
                        <li itemid="" class="liSortable ui-sortable-handle">{{Drop Here}}</li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
把它叫做

var result = getNewOrderForItemAndDescendents($('.containerForReordering'));
ERRPR 其返回结果与每个分隔符| | |之前的最后一个数字1类似:

|||WZ_VS_Test_msgSection---NULL---1|||
    WZ_VS_Test_Top---WZ_VS_Test_msgSection---1|||
        WZ_VS_Test_Top.First---WZ_VS_Test_Top---1|||
            WZ_VS_Test_Top.First.1---WZ_VS_Test_Top.First---1|||
            WZ_VS_Test_Top.First.2---WZ_VS_Test_Top.First---1|||
        WZ_VS_Test_Top.Second---WZ_VS_Test_Top---1|||
            WZ_VS_Test_Top.Second.1---WZ_VS_Test_Top.Second---1|||
            WZ_VS_Test_Top.Second.2---WZ_VS_Test_Top---1
所以基本上,虽然它会在函数的递归上下文中尊重本地副本sNewOrder,但nOrder变量不会从jquery每个循环递增,它始终保持在1

我做错了什么

PS:我试着使用每个元素的索引,即使在第二个元素上,它也总是为零!!!这个问题确实很奇怪


PS2:在JS中做了一个小小的改变,现在不再提供函数调用的顺序,这在任何方面都是多余的。在每个级别,数字都应该以1开头,但对于兄弟姐妹来说,应该是2、3、4…

没关系,我解决了这个问题。我的HTML结构是这样的,每个项目UL都在单个LI中,因此没有任何兄弟UL,因此每个项目都不会运行两次

更新代码:

var getNewOrderForItemAndDescendents = function(selector) {
    var sNewOrder = "";
    var nOrder = 1;

    $(selector).find('>li').each(function(index, obj) {
        if ($(this).attr('itemid')) {
            sNewOrder += "|||" + $(this).attr('itemid') + "---" + ($(this).parents('li:first').length > 0 ? $(this).parents('li:first').attr('itemid') : $(this).parents('ul:first').attr('itemid'))
                + "---" + nOrder;

            nOrder = nOrder + 1;

            $(this).find('> ul').each(function() {
                sNewOrder += getNewOrderForItemAndDescendents($(this));
            });
        }
    });

    return sNewOrder;
}
var getNewOrderForItemAndDescendents = function(selector) {
    var sNewOrder = "";
    var nOrder = 1;

    $(selector).find('>li').each(function(index, obj) {
        if ($(this).attr('itemid')) {
            sNewOrder += "|||" + $(this).attr('itemid') + "---" + ($(this).parents('li:first').length > 0 ? $(this).parents('li:first').attr('itemid') : $(this).parents('ul:first').attr('itemid'))
                + "---" + nOrder;

            nOrder = nOrder + 1;

            $(this).find('> ul').each(function() {
                sNewOrder += getNewOrderForItemAndDescendents($(this));
            });
        }
    });

    return sNewOrder;
}