我有以下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 here”)有一个“last”类。 因为我们可以动态添加数据,所以当用户点击“保存”时,我们可以确定最终有多少级别的数据
答案 0 :(得分:1)
您可以使用递归函数来保存树对象;
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'), []));
答案 1 :(得分:0)
如果你想逐字地重新发送同一个东西,作为网站上其他地方的HTML字符串,你可以这样做吗?然后在您喜欢的地方.append()
或.prepend()
treeview
。
var treeview = $('#productTree')。parent()。html()
答案 2 :(得分:0)
假设你想要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
的文本。