2

我有以下 html 结构,使用 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 and bottom2 here”)有一个类“last”,如果有帮助的话。因为我们可以动态添加数据,所以当用户点击“保存”时,我们可以确定最后有多少 ul li 级别

4

3 回答 3

2

您可以使用递归函数来保存树对象;

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-22T13:37:50.603 回答
0

如果您想逐字复制相同的内容,作为网站其他地方的 HTML 字符串,您可以这样做吗?然后.append()或者.prepend() treeview你喜欢的地方。

​var treeview = $('#productTree').parent().html()

于 2012-06-22T12:51:55.980 回答
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每个列表项中 s 中的文本。

于 2012-06-22T12:54:28.017 回答