1114 Как заметил комментатор, рекурсия - это хитрость. Когда вы зацикливаете свой
, вам нужно будет проверять каждый на наличие вложенного
. Если это так, вы снова вызовете функцию, передав ей вложенный
, а также «префикс» строки.
На основании ваших комментариев параметр по умолчанию (и, вероятно, оператор остальных (...
)) вызовет проблемы с вашим браузером.
Разветвленный JSFiddle: https://jsfiddle.net/h56zeqkg/
Вот версия с некоторым унаследованным, дружественным к IE11 JS:
function stringBuilder(ul, prefix) {
prefix = prefix || '';
var arr = [].slice.call(ul.children);
var stringArr = arr.map(function (li) {
if (li.children.length > 1) {
return stringBuilder(li.querySelector('ul'), prefix + li.querySelector('a').textContent + '/');
} else {
return prefix + li.querySelector('a').textContent;
}
});
return [].concat.apply([], stringArr);
}
stringBuilder(document.querySelector('ul'));
[1113 ] Оригинал:
JSFiddle: https://jsfiddle.net/hvojpds6/
Вот фрагмент кода JS:
function stringBuilder(ul, prefix = '') {
return [].concat(...Array.from(ul.children).map(li => {
// recurse
if (li.children.length > 1) {
return stringBuilder(li.querySelector('ul'), prefix + li.querySelector('a').textContent + '/');
} else {
return prefix + li.querySelector('a').textContent;
}
}))
}
stringBuilder(document.querySelector('ul'));
Выходные данные из stringBuilder
будет array
, со следующим:
stringBuilder(document.querySelector('ul'))
(7) ["First", "Second/Second - 1", "Second/Second - 2", "Second/Second - 3/Aaa", "Second/Second - 3/Bbb", "Second/Second - 3/Ccc", "Third"]
0: "First"
1: "Second/Second - 1"
2: "Second/Second - 2"
3: "Second/Second - 3/Aaa"
4: "Second/Second - 3/Bbb"
5: "Second/Second - 3/Ccc"
6: "Third"
length: 7
__proto__: Array(0)
Я сказал бы, что использование GeoDjango с этой целью является определенно излишеством.
Это могло быть реализовано просто с картой изображения, или Canvas/SVG или Flash для дополнительных симпатичных точек :)
По моему скромному мнению, использование GeoDjango для плана размещения не является плохой идеей. Но если Ваши данные не изменяются очень, и объем данных (комнаты, области, рабочая станция...) не является очень большим, то Вам, возможно, не понадобились бы база данных и полный стек GeoDjango.
Простое решение использовало бы OpenLayers непосредственно с изображением (возможно, просканированный) план размещения как фоновый слой. OpenLayers позволяет Вам также определить регион и точки (маркеры), которые обрабатывают "мышь по" или нажимают события.
Примером использования OpenLayers для плана размещения являются Планы Office через, Открывают Layers.
Как часто план размещения изменится? Из Вашего описания было бы достаточно простое изображение с картой изображения.