0

我创建了一个函数,可以将任何类型的 JSON 数据遍历到 UL/LI 中。现在我需要做相反的事情并将 UL/LI 转换回 JSON 对象。如果可能,我想在 JQuery 中执行此操作。那么如何将我的嵌套 UL/LI 转回其原始 JSON 对象?

var traverseJson = function(jsonObj) {
  "use strict";
  var htmlOut = "",
    value,
    inputv,
    prop;
  for (prop in jsonObj) {
    if (jsonObj.hasOwnProperty(prop)) {
      value = jsonObj[prop];
      switch (typeof value){
        case "object":
          htmlOut += "<li><b>" + prop + "</b><span>" + traverseJson(value) + "</span></li>";
          break;
        default:
          inputv = "<span>" + value  + "</span>";
          htmlOut += "<li class='val'><b>" + prop + ":</b>" + inputv + "</li>";
          break;
      }
    }
  }
  return "<ul>" + htmlOut + "</ul>";
};
4

2 回答 2

2

那么你所要做的就是遍历 li 元素。

function parseList() {
    var outObj = {};

    $("li").each(function () {
        var propName = $(this).children("b").html();
        var propValue = $(this).children("span").html();
        outObj[propName] = propValue;
    });

    return outObj;
}
于 2013-05-14T21:17:15.017 回答
1

像这样的东西应该工作。它接受一个代表 div 的 jQuery 对象,并在其中找到第一个ul标签并向下遍历,直到找到li不包含标签的ul标签。

var divToJson = function ($div) {
  "use strict";
  var traverseUl = function ($ul) {
    var  output = {},
      $li = $ul.children('li');
    $li.each(function () {
      var $this = $(this),
        propName = $this.children('b').text(),
        $propValue = $this.children('span'),
        $subList = $propValue.find('ul').first();

        if ($subList.length > 0) {
          output[propName] = traverseUl($subList);
        } else {
          output[propName] = $propValue.text();
        }
    });
    return output;
  };

  return traverseUl($div.find('ul').first());
}; 

var theDiv = $('#somediv');
console.log(divToJson(theDiv));
于 2013-05-14T22:23:52.847 回答