构建级联列表的问题
problems building cascading lists
我有一个json来自服务器(不能改变),我需要建立一个嵌套的无序列表菜单。
这里是jsFiddle - warning!运行需要很长时间,这只是示例数据-实际数据要大得多。
不知何故,它搞砸了,我结束了许多东西不合适,它需要永远运行。
代码:
$.each(jData, function (k, v) {
var vendor = JSON.stringify(k);
vendor = vendor.replace(/"/g, '');
var vendorRow = '<li data-vendor="' + vendor + '" class="listItem v">' + vendor + '</li>';
$('ul#vendors').append(vendorRow);
$('ul#vendors li[data-vendor="'+vendor+'"]').append('<ul class="sub hide"/>');
var getArea = _.groupBy(jData[vendor], 'area');
$.each(getArea, function(k, v) {
var area = JSON.stringify(k);
area = area.replace(/"/g,'');
var thisArea = '<li data-area="'+area+'" class="listItem a">'+area+'</li>';
$('ul#vendors li[data-vendor="'+vendor+'"] ul.sub').append(thisArea);
$('ul#vendors li[data-area="'+area+'"]').append('<ul class="sub hide"/>');
var getRegion = _.groupBy(getArea[area], 'region');
$.each(getRegion, function(k, v) {
var region = JSON.stringify(k);
region = region.replace(/"/g,'');
var thisRegion = '<li data-region="'+region+'" class="listItem a">'+region+'</li>';
$('ul#vendors li[data-area="'+area+'"] ul.sub').append(thisRegion);
$('ul#vendors li[data-region="'+region+'"]').append('<ul class="sub hide"/>');
var getMarket = _.groupBy(getRegion[region], 'market');
$.each(getMarket, function(k, v) {
var market = JSON.stringify(k);
market = market.replace(/"/g,'');
var thisMarket = '<li data-market="'+market+'" class="listItem m">'+market+'</li>';
$('ul#vendors li[data-region="'+region+'"] ul.sub').append(thisMarket);
$('ul#vendors li[data-market="'+market+'"]').append('<ul class="sub hide"/>');
var getSwitch = _.groupBy(getMarket[market], 'switch');
$.each(getSwitch, function(k, v) {
var vSwitch = JSON.stringify(k);
vSwitch = vSwitch.replace(/"/g,'');
var thisSwitch = '<li data-switch="'+vSwitch+'" class="listItem s">'+vSwitch+'</li>';
$('ul#vendors li[data-market="'+market+'"] ul.sub').append(thisSwitch);
});
});
});
});
});
示例输出:
<div id="chartWizard">
<ul id="vendors">
<li class="listItem v" data-vendor="levdore">
levdore
<ul class="sub hide">
<li class="listItem a" data-area="Midwest">
Midwest
<ul class="sub hide">...</ul>
<ul class="sub hide">...</ul>
<ul class="sub hide">...</ul>
</li>
</ul>
</li>
</ul>
</div>
这个列表似乎在第2个ul处崩溃了。下标为多个ul。
我真的认为使用递归重新编写代码来逻辑地遍历对象是正确的方法。在某个地方,你对对象进行了多次迭代这就是为什么它需要很长时间才能加载。我重新设计了你的例子,这是我想到的。你也许可以进一步熨平它,使它更易于阅读。
工作示例:http://jsfiddle.net/me6SM/9/
doRecursive(jData,null,$('ul#vendors'),0);
function doRecursive(grp,parent,selector,depth){
$.each(grp, function(k,v) {
var item = JSON.stringify(k).replace(/"/g,'');
var element = ['area','region','market','switch'][depth];
var thisSelector = 'data-' + element + '="'+item+'"';
var thisItem = $('<li ' + thisSelector + ' class="listItem '+ (element ? element[0] : '') +'">'+item+'</li>');
selector.append(thisItem);
var childList = $('<ul class="sub hide"/>');
thisItem.append(childList);
if(!element){return;}
var next = _.groupBy(grp[item], element );
doRecursive(next,item, childList , depth + 1);
});
}
相关文章:
- jQuery,引导程序下拉列表问题
- JQuery刷新列表效果-淡入淡出问题
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- jQuery切换列表菜单问题
- 当前用户顶部列表的曲目快照出现间歇性问题
- 为了在列表中搜索,角度过滤器有问题
- 我正试图获得一个带有复选框的多选下拉列表,在填充项目和获得所有选中的工作时遇到了一些问题
- 访问knockout.js选择列表中的值时出现问题
- 面临从模型中为下拉列表设置值的问题
- JQuery Mobile自定义下拉列表问题
- SAPUI5绑定问题:json文件中维护的列表项链接不起作用
- MVC中选择下拉列表的设置值出现问题
- 将JSON REST请求加载到Kendo ui列表视图中的问题
- 我无法将变量从动态列表传递到php页面进行处理.这是我不理解的逻辑问题吗
- ASP.NET MVC级联下拉列表列出Javascript问题
- 列表/数组的迭代问题
- jQuery Date 下拉列表的问题
- 可以在网站上嵌入Github问题列表(带有特定标签)
- 浏览器兼容性问题列表
- 无法获取具有相同参数的多个实例的问题列表