Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
38 / 27 / 13
Регистрация: 18.12.2019
Сообщений: 423
Записей в блоге: 1

Проблема с элементом списка

20.05.2023, 17:14. Показов 585. Ответов 1

Студворк — интернет-сервис помощи студентам
Есть вот такое вот задание:

Написать клиентский сценарий, позволяющий динамически создавать
многоуровневый маркированный список. На Web-странице следует
предусмотреть интерфейс, позволяющий выполнить следующие действия:
 добавить новый элемент в конец списка;
 вставить новый элемент списка в заданную позицию;
 изменить текст элемента списка;
 добавить вложенный список;
 удалить элемент списка.

Работа с конструктором списка происходит по следующему принципу.
 При нажатии на кнопку «Добавить новый список» создаётся маркированный
список с одним элементом.
 Для изменения текста элемента списка следует выбрать соответствующий
переключатель, ввести новый текст, после чего «кликнуть» на элементе
списка.
 Для добавления нового элемента в конец списка следует выбрать
соответствующий переключатель, ввести текст, после чего «кликнуть» на
любом элементе списка, расположенном на этом же уровне.
 Для вставки нового элемента списка в конкретную позицию следует
выбрать соответствующий переключатель, ввести текст, после чего
«кликнуть» на том элементе списка, перед которым нужно вставить новый
элемент.
 Для добавления вложенного списка следует выбрать соответствующий
переключатель, ввести текст, после чего «кликнуть» на том элементе
списка, для которого вложенный список будет дочерним. Следует
предотвращать попытку создания вложенного списка для элемента, у
которого уже имеется дочерний список.
 Для удаления элемента списка следует выбрать соответствующий
переключатель, затем «кликнуть» на элементе списка, который нужно
удалить. Следует учесть, что при удалении элемента списка удаляются все
его дочерние элементы.
Все работает как и задумывалось, кроме "Insert New Item" (вставить новый элемент списка в заданную позицию).
Съедается маркировка элемента на который кликнул.
До клика по первому и второму пункту меню:

После кликов:


На видео, наверное лучше будет понятна проблема (около 10 секунд):
Запись 2023-05-20 165856.mp4

Помогите пожалуйста разобраться в чем проблема, где ошибка и как ее исправить. Заранее благодарен за помощь в решении проблемы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2023, 17:14
Ответы с готовыми решениями:

Лямба вызов (Получить разность между k - м элементом списка х и n - м элементом списка y)
Помогите пожалуйста Составить не рекурсивную программу в форме лямбда вызова. Получить разность между k-м элементом списка х и n-м...

Получить разность между k-м элементом списка х и n-м элементом списка y
1. Даны два числовых списка x и Y, k и n - целые числа (k, n = 1, 2, 3). Получить разность между k-м элементом списка х и n-м элементом...

Даны два списка. Каждый элемент первого списка ассоциативно связан соответствующим элементом второго списка
Помогите пожалуйста Даны два списка: список студентов и список их успеваемости. Каждый элемент первого списка ассоциативно связан с...

1
38 / 27 / 13
Регистрация: 18.12.2019
Сообщений: 423
Записей в блоге: 1
21.05.2023, 13:28  [ТС]
Лучший ответ Сообщение было отмечено Eva Rosalene как решение

Решение

Проблема решена. Возможно кому-то пригодится.

JavaScript
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<!DOCTYPE html>
<html>
 
<head>
    <style>
        ul {
            list-style-type: disc;
        }
 
        ul ul {
            list-style-type: circle;
        }
 
        ul ul ul {
            list-style-type: square;
        }
    </style>
</head>
 
<body>
    <!-- User interface for different actions -->
    <h1>Dynamic Multi-level Bulleted List</h1>
    <div>
        <!-- Input and label for adding a new element at the end of the list -->
        <input type="radio" name="action" value="add" id="add-radio">
        <label for="add-radio">Add New Element:</label>
        <input type="text" id="add-text" value="New Element">
        <br>
        <!-- Input and label for inserting a new item at a specific position -->
        <input type="radio" name="action" value="insert" id="insert-radio">
        <label for="insert-radio">Insert New Item:</label>
        <input type="text" id="insert-text" value="New Item">
        <br>
        <!-- Input and label for changing the text of a list item -->
        <input type="radio" name="action" value="change" id="change-radio">
        <label for="change-radio">Change Text:</label>
        <input type="text" id="change-text" value="New Text">
        <br>
        <!-- Input and label for adding a nested list -->
        <input type="radio" name="action" value="nested" id="nested-radio">
        <label for="nested-radio">Add Nested List:</label>
        <input type="text" id="nested-text" value="Nested List">
        <br>
        <!-- Input and label for removing an item -->
        <input type="radio" name="action" value="remove" id="remove-radio">
        <label for="remove-radio">Remove Item</label>
    </div>
    <br>
    <!-- Button to add a new list -->
    <button onclick="addNewList()">Add New List</button>
    <hr>
    <div id="list-container" onselectstart="return false;">
        <!-- Root bulleted list with one initial list item -->
        <ul id="root-list">
            <li>
                <!-- Clickable span representing the list item -->
                <span onclick="handleClick(event)">List Item 1</span>
            </li>
        </ul>
    </div>
 
    <script>
        // Function to add a new list when the "Add New List" button is clicked
        function addNewList() {
            const rootList = document.getElementById('root-list');
            const newItem = document.createElement('li');
            newItem.innerHTML = '<span onclick="handleClick(event)">New List Item</span>';
            rootList.appendChild(newItem);
        }
 
        // Function to handle the click event on list items
        function handleClick(event) {
            // Get the selected action from the radio buttons
            const action = document.querySelector('input[name="action"]:checked').value;
            // Get the corresponding text input based on the selected action
            const text = getTextFromInput(action);
 
            // Call the appropriate function based on the selected action
            switch (action) {
                case 'change':
                    changeText(event.target, text);
                    break;
                case 'add':
                    addNewElement(event.target, text);
                    break;
                case 'insert':
                    insertNewItem(event.target, text);
                    break;
                case 'nested':
                    addNestedList(event.target, text);
                    break;
                case 'remove':
                    removeItem(event.target);
                    break;
            }
        }
 
        // Function to get the text input based on the selected action
        function getTextFromInput(action) {
            switch (action) {
                case 'change':
                    return document.getElementById('change-text').value;
                case 'add':
                    return document.getElementById('add-text').value;
                case 'insert':
                    return document.getElementById('insert-text').value;
                case 'nested':
                    return document.getElementById('nested-text').value;
                default:
                    return '';
            }
        }
 
        // Function to change the text of a list item
        function changeText(target, text) {
            target.textContent = text;
        }
 
        // Function to add a new element at the end of the list
        function addNewElement(target, text) {
            const rootList = document.getElementById('root-list');
            const newItem = document.createElement('li');
            newItem.innerHTML = '<span onclick="handleClick(event)">' + text + '</span>';
            rootList.appendChild(newItem);
        }
 
        // Function to insert a new item at a specific position in the list
        function insertNewItem(target, text) {
            const newItem = document.createElement('li');
            newItem.innerHTML = '<span onclick="handleClick(event)">' + text + '</span>';
            target.parentNode.parentNode.insertBefore(newItem, target.parentNode);
        }
 
        // Function to add a nested list for a list item
        function addNestedList(target, text) {
            // Check if the parent already has a nested list
            if (target.parentNode.querySelector('ul')) {
                alert('Cannot create nested list for an element that already has a child list.');
                return;
            }
 
            const nestedList = document.createElement('ul');
            const newItem = document.createElement('li');
            newItem.innerHTML = '<span onclick="handleClick(event)">' + text + '</span>';
            nestedList.appendChild(newItem);
            target.parentNode.appendChild(nestedList);
        }
 
        // Function to remove a list item
        function removeItem(target) {
            const parentList = target.parentNode.parentNode;
            parentList.removeChild(target.parentNode);
        }
    </script>
</body>
 
</html>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2023, 13:28
Помогаю со студенческими работами здесь

Найти число элементов списка между минимальным элементом и максимальным элементом
Дан список L, элементы которого являются целыми числами. Найти число элементов между минимальным элементом и максимальным элементом.

Найти число элементов между минимальным элементом и максимальным элементом списка
Дан список L, элементы которого являются целыми числами. Найти число элементов между минимальным элементом и максимальным элементом. В...

Как связать звено элемента динамического списка с выбранным элементом из списка?
как связать звено элемента динамического списка с выбранным элементом из списка в коде? procedure TForm1.Edit2Change(Sender:...

Определите совпадает ли первый элемент списка Х, с последним элементом списка У
Определите совпадает ли первый элемент списка Х, с последним элементом списка У - помогите реализовать

Сравнить каждого элемента списка с каждым элементом другого списка
Здравствуйте! Задача состоит в следующем: Даны два списка, они могут быть не равны по количеству элементов. Необходимо сравнить каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru