【问题标题】:Build a JSON class from existing <ul> html从现有的 <ul> html 构建 JSON 类
【发布时间】:2015-10-01 07:15:07
【问题描述】:

我有一个基于&lt;ul&gt; 层次结构的displays an organization chart 的jQuery 插件。

这将允许我的用户拖放员工,一旦拖放,就会触发一个事件,告诉我 DOM 已更改。此时我想阅读&lt;ul&gt;,并从中构建一个 JSON 类,以便将其发送到我的服务器 (ASP .NET MVC) 以进行进一步处理。

是否有任何图书馆可以为我做这件事,如果没有,我将如何自己去做?

html示例:

<ul id="org" style="display:none">
<li>
  Food
  <ul>
    <li>Beer</li>
    <li>Vegetables
      <ul>
        <li>Pumpkin</li>
        <li><a href="http://tquila.com" target="_blank">Aubergine</a></li>
      </ul>
    </li>
    <li>Bread</li>
    <li>Chocolate
      <ul>
        <li>Topdeck</li>
        <li>Reese's Cups</li>
      </ul>
    </li>
  </ul>
</li>
</ul>

【问题讨论】:

  • 好问题。我不知道任何库,我可以建议一种使用循环等的方法。但也许字符串替换实际上可以完成这项工作。
  • 字符串替换?喜欢用其他东西替换
    • 标签?嗯。现在我想知道我是否不能将其解析为 xml?
  • 如果它有效的XML,你可以使用Converting between JSON and XML。 (上面的示例通过了 XML 验证检查。)
  • 但这不是 XML,而是 HTML。我认为在这种情况下字符串替换很好
  • @kienct89 好的,换成什么?我不确定 OP 想要达到什么目的......

标签: c# jquery html json


【解决方案1】:

您需要遍历 dom 节点并创建正确的 json,如下所示:

var getTreeData = function(parentNode){
    var nodes = [];
    var $parentNode = $(parentNode);
    $parentNode.children('li').each(function(index, li){
    var nodeData = {};
    var nodeText = $(li).contents().filter(function() {
  return this.nodeType == 3;
}).text();
    nodeData.text = nodeText.trim().replace('\n', '');
    if($(li).children('ul').length>0){
        nodeData.children = getTreeData($(li).children('ul'))
    }
        nodes.push(nodeData);
    });

    return nodes;
}

现在调用getTreeData函数传递父树ul如下:

var treeData = getTreeData($('#org'));

这是完整的小提琴示例:https://jsfiddle.net/rxwy4zqw/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2021-05-24
  • 2011-04-25
  • 1970-01-01
  • 2019-11-27
  • 2020-11-14
相关资源
最近更新 更多