const makeTree = (root) => {
const tree = {};
const step = (root, branch) => {
root.querySelectorAll(':scope > [class^="block"]').forEach((element, index) => {
const className = [...element.classList.values()].find(
(className) => className.startsWith('block')
) ?? element.className;
const key = `${className}_${index + 1}`;
branch[key] = {};
const control = element.querySelector(':scope > input');
if (control) {
branch[key].value = control.value;
}
step(element, branch[key]);
});
};
step(root, tree);
return tree;
};
const tree = makeTree(document.body);
console.log(tree);
const makeTree = (root) => {
const tree = {};
const step = (root, branch) => {
root.querySelectorAll(':scope > [class^="block"]').forEach((element, index) => {
const className = [...element.classList.values()].find(
(className) => className.startsWith('block')
) ?? element.className;
const key = `${className}_${index + 1}`;
const controls = element.querySelectorAll(':scope > input');
branch[key] = {
values: [...controls].reduce((acc, control) => {
if (control.id) {
acc[control.id] = control.value;
}
return acc;
}, {})
};
step(element, branch[key]);
});
};
step(root, tree);
return tree;
};
const tree = makeTree(document.body);
console.log(tree);
const A = {
B1: {
C1: {
D1: [
"значение конечного D в этом примере масив но ты можешь вствыить что угодно если нужно продолжить дерево то используй обьект а не массив либо делай вложенные масивы во вложенные массивы но это не совсем удобно при обращении",
],
D2: {},
D3: {},
D4: {},
},
C2: {
D1: {},
D2: {},
D3: {},
D4: {},
},
C3: {
D1: {},
D2: {},
D3: {},
D4: {},
},
},
B2: {
C1: {},
C2: {},
C3: {},
},
};