【问题标题】:Convert dynamic DOM structure to JSON将动态 DOM 结构转换为 JSON
【发布时间】:2018-12-24 13:46:29
【问题描述】:

如何将下面的 DOM 转换为 JSON 数组,这将在未来有更多的叶子。我已经尝试了很多,但没有得到任何解决方案。我找到了this,但在我的情况下这是不可能的。

HTML 代码

 <ul id="org1">
        <li>
            Main
            <ul data-self="1">
                <li data-self="2" data-parent="1">A
                    <ul data-self="2">
                        <li data-self="5" data-parent="2">A1</li>
                        <li data-self="6" data-parent="2">A2</li>
                        <li data-self="7" data-parent="2">A3</li>
                        <li data-self="8" data-parent="2">A4</li>
                        <li data-self="9" data-parent="2">A5</li>
                        <li data-self="10" data-parent="2">A6</li>
                    </ul>
                </li>
                <li data-self="3" data-parent="1">B
                    <ul data-self="3">
                        <li data-self="11" data-parent="3">B1</li>
                        <li data-self="12" data-parent="3">B2</li>
                        <li data-self="13" data-parent="3">B3</li>
                        <li data-self="14" data-parent="3">B4</li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>

JSON 要求是

{
  1:{
      2:{5,6,7,8,9,10},
      3:{11,12,13,14} 
    }
}

脚本

function recursive(dis)
    {
        $(this).find(' > ul ').each(function(){
                params[$(this).attr('data-self')]=[];
                var i=0;
                $(this).find('li').each(function(){

                     if($(this).has('ul'))
                     {
                        params[$(this).attr('data-parent')][i++]=rec(this);
                     }else
                     {
                        params[$(this).attr('data-parent')][i++]=$(this).attr('data-self');
                     }

                });
            });

    }
recursive('#org1');
console.log(params);

【问题讨论】:

  • 至少向我们展示您尝试过的什么...
  • 您尝试过的只是显示代码。我们没有输入所有代码并为您得到答案这是不可能的
  • 一分钟发帖代码
  • 请检查代码更新
  • { 1:{ 2:{5,6,7,8,9,10}, 3:{11,12,13,14} } } 不是 JSON。它甚至不是 JavaScript。

标签: javascript jquery json


【解决方案1】:

我更喜欢以下内容。您需要对 HTML 进行的 2 处更改是:

1) 向您的ul 添加一个类,例如&lt;ul data-self="2" class="nodes"&gt;。 2)在包装器ul中添加一个类,例如&lt;ul data-self="1" class="parent"&gt;。

var json = {};
$("#org1").find("ul.parent").each(function() {
    
    var $this = $(this);
    json[$this.data("self")] = {};
    var $nodes = $this.find("ul.nodes");
    $nodes.each(function() {
        var children = $(this).find("li").map(function() {
            return $(this).data("self")
        }).get();
        json[$this.data("self")][$(this).data("self")] = children;
    });
});

alert (JSON.stringify(json));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="org1">
    <li>
        Main
        <ul data-self="1" class="parent">
            <li data-self="2" data-parent="1">A
                <ul data-self="2" class="nodes">
                    <li data-self="5" data-parent="2">A1</li>
                    <li data-self="6" data-parent="2">A2</li>
                    <li data-self="7" data-parent="2">A3</li>
                    <li data-self="8" data-parent="2">A4</li>
                    <li data-self="9" data-parent="2">A5</li>
                    <li data-self="10" data-parent="2">A6</li>
                </ul>
            </li>
            <li data-self="3" data-parent="1">B
                <ul data-self="3" class="nodes">
                    <li data-self="11" data-parent="3">B1</li>
                    <li data-self="12" data-parent="3">B2</li>
                    <li data-self="13" data-parent="3">B3</li>
                    <li data-self="14" data-parent="3">B4</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

【讨论】:

  • 不需要更改 HTML
  • @JuanMendes 当然,这只是我的偏好。
  • 谢谢,您提出了非常好的解决方案,但我认为如果在叶子
  • 处再添加两个
      ,它可能不起作用,因为我们正在使用类“节点”它可能会递归收集所有孩子
        s 也明白我的意思吗? LShetty
  • 是的,您在第二级添加了更多孩子,您可以在“Main->A->A1->
    • A11
    下添加>"
  • 当然,我的回答完全基于您的问题和您发布的示例以及假设的结构扩展。无法根据您在 DOM 结构中可能存在的所有嵌套级别来回答。修改代码以满足您的需求,祝您好运;)
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签