如何将HTML ul-li结构保存到javascript对象中

时间:2012-06-22 12:43:49

标签: javascript jquery html html-lists

我有以下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”类。  因为我们可以动态添加数据,所以当用户点击“保存”时,我们可以确定最终有多少级别的数据

3 个答案:

答案 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的文本。