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

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

20.05.2023, 17:14. Показов 575. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru