Javascript 使用jquery递归函数不更新每个变量的值
我使用了以下格式的HTML: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
<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;
}