前端text树形文本转树形json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="/js/jquery.js"></script>
<meta charset="utf-8" />
</head>
<body>
<textarea id="txtarea" rows="6"></textarea>
<input type="button" onclick="convertToJson()" value="转换" />
<textarea id="txtarearesult" rows="6"></textarea>
</body>
</html>
<script>
function convertToJson() {
var val = $("#txtarea").val();
var lines = val.split('\n');
var preNode = {};
var resultJson = [];
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
var lastIndex = line.lastIndexOf("+");
var text = line.substr(lastIndex + 1, line.length);
var currentNode = { text: text, value: text, level: lastIndex, children: [] };
if (lastIndex == -1) {
resultJson.push(currentNode);
} else if (lastIndex > preNode.level) {
preNode.children.push(currentNode);
} else {
var node = getNodeBylevel(resultJson, lastIndex - 1);
if (node) {
node.children.push(currentNode);
} else {
resultJson.push(currentNode);
}
}

preNode = currentNode;
}

$("#txtarearesult").val(JSON.stringify(resultJson));
//alert(val);
}

function getNodeBylevel(nodes, level) {
if (nodes && nodes[0].level == level) {
return nodes[nodes.length - 1];
} else {
return getNodeBylevel(nodes[nodes.length - 1].children, level);
}
};
</script>