Из матрицы в древовидное меню
Добрый день!
В javascript пока в процессе знакомства, и возникла такая задачка в процессе обучения, которая затормозила... Есть матрица [1,2,[3,4,[5,6,7],8],9,10]. С помощью функции (желательно, рекурсивной), нужно её превратить в меню вида: <ul> <li>1</li> <li>2</li> <ul> <li>3</li> <li>4</li> <ul> <li>5</li> <li>6</li> <li>7</li> </ul> <li>8</li> </ul> <li>9</li> <li>10</li> </ul> Написала такой код: function recursiveList (data) { var arr = data; var list = document.getElementById('list'); var newlist = document.createElement('ul'); for (var i = 0; i < arr.length; i++) { var item = document.createElement("li"); item.appendChild(document.createTextNode(arr[i])); newlist.appendChild(item); }; list.appendChild(newlist); for (var i = 0; i < arr.length; i++) { if (typeof(arr[i]) == 'object') { return recursiveList(arr[i]); } }; return list; } Но пока что получаю значения в виде: <ul> <li>1</li> <li>2</li> <li>3 4 5 6 7 8</li> <li>9</li> <li>10</li> </ul> <ul> <li>3</li> <li>4</li> <li>5 6 7</li> <li>8</li> </ul> <ul> <li>5</li> <li>6</li> <li>7</li> </ul> Что нужно сделать, чтоб привести её в нужный вид? Буду очень благодарна помощи! :victory: |
создание дерева ul li из массива
АлександраМТ,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> var data = [1,2,[3,4,[5,6,7],8],9,10]; function recursiveList(data) { var newlist = document.createElement("ul"), item; for (var i = 0; i < data.length; i++) { if (typeof data[i] == "object") item = recursiveList(data[i]); else { item = document.createElement("li"); item.appendChild(document.createTextNode(data[i])) } newlist.appendChild(item) } return newlist }; document.body.appendChild(recursiveList(data)) </script> </body> </html> |
Цитата:
Твою задачу можно очень тупо, в лоб решить, безо всякой вонючей ркурсии. <html> <head> </head> <body> <script> with(document){ div=createElement("div") div.innerHTML=JSON.stringify([1,2,[3,4, [5, 6, 7], 8], 9, 10]) .replace(/\[/g, "<ul>") .replace(/\]/g, "</ul>") .replace(/(\d+)/g, "<li>$1</li>") .replace(/,/g, "") body.appendChild(div) } </script> </body> </html> |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 07:23. |