Показать сообщение отдельно
  #6 (permalink)  
Старый 07.02.2023, 02:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от рони
надо брать объект и отображать его текущее состояние,
примерно так ... кликайте по названиям

<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const data = {
                child: {
                    all: {
                        child: {
                            running: {
                                child: {
                                    cat: {
                                        child: {
                                            cat1: {
                                                title: 'mmm'
                                            },
                                            cat2: {
                                                title: 'ppp'
                                            }
                                        }
                                    },
                                    dog: {
                                        child: {
                                            dog1: {
                                                title: 'rrr'
                                            },
                                            dog2: {
                                                title: 'gav'
                                            }
                                        }
                                    }
                                }
                            },
                            flying: {
                                child: {
                                    bird: {
                                        child: {
                                            bird1: {
                                                title: 'fly'
                                            }
                                        }
                                    }
                                }
                            }
                        },
                    }
                },
                show: true
            }
            const createHtml = data => {
                let ul = document.createElement('ul');
                if (data.child) {
                    for (let key in data.child) {
                        let li = document.createElement('li');
                        li.textContent = key;
                        ul.append(li);
                        li.addEventListener("click", function(event) {
                            event.preventDefault();
                            event.stopPropagation();
                            data.child[key].show = !data.child[key].show;
                            create();
                        })
                        let el = data.child[key],
                            show = data.child[key].show;
                        if (typeof el == 'object' && show) li.append(createHtml(el))
                    }
                }
                if (data.title) {
                    let li = document.createElement('li');
                    li.textContent = `my name is ${data.title}`;
                    ul.append(li);
                }
                return ul
            }
            const create = () => {
                let html = createHtml(data);
                document.querySelector('.test').innerHTML = '';
                document.querySelector('.test').append(html)
            }
            create()
        })
    </script>
</head>
<body>
    <div class="test"></div>
</body>
</html>
Ответить с цитированием