我有下面的html结构usilg ul和li。
<ul class="treeview" id="productTree">
<li class="collapsable lastCollapsable">
<div class="hitarea collapsable-hitarea lastCollapsable-hitarea"></div>
<span id="top1" class="">top1</span>
<ul>
<li class="collapsable lastCollapsable">
<span class="">mod1</span>
<ul>
<li class="last">
<span>bottom1</span>
</li>
</ul>
</li>
</ul>
</li>
<li class="collapsable lastCollapsable">
<span id="top2" class="">top2</span>
<ul>
<li class="collapsable lastCollapsable">
<span class="">mid2</span>
<ul>
<li class="last">
<span>bottom2</span>
</li>
</ul>
</li>
</ul>
</li>
</ul>该网站允许用户在此结构下添加更多数据,并使用jquery treeview动态显示树结构。现在,我需要将整个ul-li结构保存到一个js对象中,以便将来在网站中使用。我该如何实现这一点?最后一个节点(这里是“bottom1和bottom2”)有一个类" last“,如果有帮助的话。因为我们可以动态地添加数据,所以我们可以确定当用户单击“保存”时,最终的ul li级别是多少。
发布于 2012-06-22 21:37:51
可以使用递归函数来保存树对象;
function save(obj_ul, tree){
var obj_lis = obj_ul.find("li")
if (obj_lis.length == 0) return;
obj_lis.each(function(){
var $this = $(this);
if($this.parent("ul").get(0) == obj_ul.get(0))
{
tree.push({
name : $this.find('> span').text(),
child : save($this.find("ul").first(), [])
});
}
});
return tree;
}
console.log(save($('#productTree'), []));发布于 2012-06-22 20:51:56
如果你想在站点的其他地方逐字复制相同的东西,作为HTML字符串,你可以这样做吗?然后在你喜欢的地方使用.append()或.prepend() treeview。
productTree var treeview =$(‘#’).parent().html()
发布于 2012-06-22 20:54:28
假设您需要JSON:
function save(){
var tmp = [];
$('#productTree li.collapsable').each(function(){
var $this = $(this),
$spans = $this.find('span'),
o = [];
$spans.each(function(){
o.push($(this).text())
})
tmp.push(o);
});
return tmp;
}您也可以使用map()来完成相同的任务。
编辑:已更新,假设您的文本将存在于span中。这将创建一个数组数组,每个数组包含来自每个列表项中的span的文本。
https://stackoverflow.com/questions/11156416
复制相似问题