С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 4

Собрать несколько функцию в одну

21.10.2019, 02:06. Показов 1262. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, помогите решить кейс на JS.

Есть меню на HTML, состоящее из двух строк (вот выдержка):

HTML5
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
<!-- ПУНКТЫ, РАЗМЕЩАЕМЫЕ НА 1 СТРОКЕ МЕНЮ -->
<div class="str2">
<a id="str21id" href="#"onClick="shownado31(); return false;">[Страница-1]</a>
<a id="str22id" href="#"onClick="shownado32(); return false;">[Страница-2]</a>
<a id="str23id" href="#"onClick="shownado33(); return false;">[Страница-3]</a>
<a id="str24id" href="#"onClick="shownado34(); return false;">[Страница-4]</a>
<a id="str25id" href="#"onClick="shownado35(); return false;">[Страница-5]</a>
<a id="str26id" href="#"onClick="shownado36(); return false;">[Страница-6]</a>
<a id="str27id" href="#"onClick="shownado37(); return false;">[Страница-7]</a>
</div>
 
 
<!-- Есть ссылки меню, которые отображаются на 2 строке меню в зависимости от выбранной одной из семи страниц -->
<!-- СОЗДАЁМ МАРКИРОВАННЫЙ СПИСОК НА 2 СТРОКЕ СТРАНИЦЫ -->
<div class="str31" id="str31id">
<a id="str311id" href="#"onClick="shownado311(); return false;">[Страница-1.1]</a>
</div>
 
<div class="str32 startskrit " id="str32id">
<a id="str321id" href="#"onClick="shownado321(); return false;">[Страница-2.1]</a>
<a id="str322id" href="#"onClick="shownado322(); return false;">[Страница-2.2]</a>
<a id="str323id" href="#"onClick="shownado323(); return false;">[Страница-2.3]</a>
</div>
 
<div class="str33 startskrit" id="str33id">
<a id="str331id" href="#"onClick="shownado331(); return false;">[Страница-3.1]</a>
<a id="str332id" href="#"onClick="shownado332(); return false;">[Страница-3.2]</a>
<a id="str333id" href="#"onClick="shownado333(); return false;">[Страница-3.3]</a>
<a id="str334id" href="#"onClick="shownado334(); return false;">[Страница-3.4]</a>
<a id="str335id" href="#"onClick="shownado335(); return false;">[Страница-3.5]</a>
<a id="str336id" href="#"onClick="shownado336(); return false;">[Страница-3.6]</a>
<a id="str337id" href="#"onClick="shownado337(); return false;">[Страница-3.7]</a>
<a id="str338id" href="#"onClick="shownado338(); return false;">[Страница-3.8]</a>
<a id="str339id" href="#"onClick="shownado339(); return false;">[Страница-3.9]</a>
<a id="str3310id" href="#"onClick="shownado3310(); return false;">[Страница-3.10]</a>
<a id="str3311id" href="#"onClick="shownado3311(); return false;">[Страница-3.11]</a>
<a id="str3312id" href="#"onClick="shownado3312(); return false;">[Страница-3.12]</a>
<a id="str3313id" href="#"onClick="shownado3313(); return false;">[Страница-3.13]</a>
<a id="str3314id" href="#"onClick="shownado3314(); return false;">[Страница-3.14]</a>
<a id="str3315id" href="#"onClick="shownado3315(); return false;">[Страница-3.15]</a>
 </div>
И т.д.


Пункты 1 строки меню показываются всегда, а видимые пункты 2 строки меню зависят от выбора ссылки на 1 строке меню.

При этом:
- при клике на любой пункт меню 1 или 2 строки кликнутая ссылка подчеркивается и текст становится черного цвета, а ранее кликнутые ссылки 1 и 2 строк сбрасывают на значение по умолчанию черный цвет и подчеркивание;
- при клике на любой из пунктов второй строки меню, продолжает выделяться пункт на 1 строке меню, соответствующей страницы (для Страницы 1.1 - выделяется Страница-1 и Старница-1.1; для Страница-3.3 - выделяется Страница-3 и Страница 3.3; остальные как я указал выше - сбрасываются на по умолчанию)
- при загрузке страницы на 2 строке меню отображается Страница 1-1 и её пункты меню: остальные до кликов скрыты.

JS реализующий изложенное для одного клика приложен ниже. В итоге у меня получилось очень много уникальный функций для ссылки ан каждый пункт меню, исполняемых по клику. Уверен, что код можно упростить, сделав одну функцию.

Прошу совета умельца собирать несколько функцию в одну. jQery не считается - нужен JS.
Заранее признателен.


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
function shownado321() {
/* ПРЕВРАЩАЕМ В БЛОКИ ВСЕ ПУНКТЫ 2 СТРОКИ МЕНЮ, ЧТОБЫ МОЖНО БЫЛО МЕНЯТЬ ИХ ЦВЕТ ПОСЛЕ КЛИКА */
str21id.style.display = "block";
str22id.style.display = "block";
str23id.style.display = "block";
str24id.style.display = "block";
str25id.style.display = "block";
str26id.style.display = "block";
str27id.style.display = "block";
 
/* ОБНУЛЯЕМ ЦВЕТ ТЕКСТА ПУНКТОВ 2 СТРОКИ ВСЕХ РАНЕЕ НАЖАТЫХ КНОПОК МЕНЮ И ПРИСВАИВАЕМ ЦВЕТ ВЫБРАННОМУ ПУНКТУ */
str21id.style.color = "";
str22id.style.color = "black";
str23id.style.color = "";
str24id.style.color = "";
str25id.style.color = "";
str26id.style.color = "";
str27id.style.color = "";
 
/* ОБНУЛЯЕМ ЦВЕТ ТЕКСТА ПУНКТОВ 3 СТРОКИ ВСЕХ РАНЕЕ НАЖАТЫХ КНОПОК МЕНЮ И ПРИСВАИВАЕМ ЦВЕТ ВЫБРАННОМУ ПУНКТУ */
 
str31id.style.color = "";
str32id.style.color = "";
str33id.style.color = "";
str34id.style.color = "";
str35id.style.color = "";
str36id.style.color = "";
str37id.style.color = "";
 
str311id.style.color = "";
str321id.style.color = "black";
str322id.style.color = "";
str323id.style.color = "";
 
str331id.style.color = "";
str332id.style.color = "";
str333id.style.color = "";
str334id.style.color = "";
str335id.style.color = "";
str336id.style.color = "";
str337id.style.color = "";
str338id.style.color = "";
str339id.style.color = "";
str3310id.style.color = "";
str3311id.style.color = "";
str3312id.style.color = "";
str3313id.style.color = "";
str3314id.style.color = "";
str3315id.style.color = "";
 
str341id.style.color = "";
str342id.style.color = "";
str343id.style.color = "";
str344id.style.color = "";
str345id.style.color = "";
str346id.style.color = "";
 
str351id.style.color = "";
str352id.style.color = "";
 
str361id.style.color = "";
 
str371id.style.color = "";
str372id.style.color = "";
str373id.style.color = "";
    
str22id.style.backgroundColor = "#398ed4";
str321id.style.backgroundColor = "";
str322id.style.backgroundColor = "";
str323id.style.backgroundColor = "";
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2019, 02:06
Ответы с готовыми решениями:

Как собрать несколько баз в одну?
Столкнулся со следующей проблемой в 1С. Есть 4 базы с сотрудниками компаний, необходимо их все выгрузить и загрузить в 1 базу. Причем...

Несколько Insert в одну функцию
Помогите составить функцию, которая вставляет записи из одной схемы в другую. Программой Bullzip загружаю данные из access, которые не...

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

6
21.10.2019, 13:14

Не по теме:

цикл? не, не слыхал...

0
21.10.2019, 18:06

Не по теме:

помнится первые мои скрипты были похожими на этот франкенштейн... за то все четко и понятно :D

0
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 4
21.10.2019, 19:25  [ТС]
Да, так есть. Это моя первая работа с меню. 7 день изучаю html, css, js. Если с html и css более менее понятно, то с js пока нет))) ну помогите уже пжл)))
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
21.10.2019, 21:32
Цитата Сообщение от NewBoss Посмотреть сообщение
ну помогите уже пжл)
Дак все же за. Только объясните на словах чего вы хотите, по коду непонятно.
0
380 / 230 / 115
Регистрация: 22.11.2016
Сообщений: 379
21.10.2019, 23:22
PHP/HTML
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
<!DOCTYPE html>
<html>
<head>
    <title>!!!!!!!!!!</title>
    <style type="text/css">
        ul { list-style: none; padding: 0; margin: 0; }
        .str { float: left; margin-right: 10px; }
        .under { display: none; }
    </style>
</head>
<body>
    <ul id="list">
        <li class="str">
            <a href="#">[Страница-1]
                <ul class="under">
                    <li><a href="#">[Страница-1.1]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-2]
                <ul class="under">
                    <li><a href="#">[Страница-2.1]</a></li>
                    <li><a href="#">[Страница-2.2]</a></li>
                    <li><a href="#">[Страница-2.3]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-3]
                <ul class="under">
                    <li><a href="#">[Страница-3.1]</a></li>
                    <li><a href="#">[Страница-3.2]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-4]
                <ul class="under">
                    <li><a href="#">[Страница-4.1]</a></li>
                    <li><a href="#">[Страница-4.2]</a></li>
                    <li><a href="#">[Страница-4.2]</a></li>
                    <li><a href="#">[Страница-4.3]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-5]
 
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-6]
 
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-7]
 
        </a></li>
    </ul>
    <script type="text/javascript">
        "use strict";
 
        document.querySelectorAll("#list .str").forEach((item) => {
            item.addEventListener("click", () => {
                document.querySelectorAll(".under").forEach((e) => e.style.display = "none");
                if(item.contains(item.querySelector(".under"))) {
                    item.querySelector(".under").style.display = "block";
                }
            });
        });
    </script>
</body>
</html>
1
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 4
22.10.2019, 02:19  [ТС]
Цитата Сообщение от fixeri Посмотреть сообщение
PHP/HTML
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
<!DOCTYPE html>
<html>
<head>
    <title>!!!!!!!!!!</title>
    <style type="text/css">
        ul { list-style: none; padding: 0; margin: 0; }
        .str { float: left; margin-right: 10px; }
        .under { display: none; }
    </style>
</head>
<body>
    <ul id="list">
        <li class="str">
            <a href="#">[Страница-1]
                <ul class="under">
                    <li><a href="#">[Страница-1.1]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-2]
                <ul class="under">
                    <li><a href="#">[Страница-2.1]</a></li>
                    <li><a href="#">[Страница-2.2]</a></li>
                    <li><a href="#">[Страница-2.3]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-3]
                <ul class="under">
                    <li><a href="#">[Страница-3.1]</a></li>
                    <li><a href="#">[Страница-3.2]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-4]
                <ul class="under">
                    <li><a href="#">[Страница-4.1]</a></li>
                    <li><a href="#">[Страница-4.2]</a></li>
                    <li><a href="#">[Страница-4.2]</a></li>
                    <li><a href="#">[Страница-4.3]</a></li>
                </ul>
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-5]
 
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-6]
 
            </a>
        </li>
        <li class="str">
            <a href="#">[Страница-7]
 
        </a></li>
    </ul>
    <script type="text/javascript">
        "use strict";
 
        document.querySelectorAll("#list .str").forEach((item) => {
            item.addEventListener("click", () => {
                document.querySelectorAll(".under").forEach((e) => e.style.display = "none");
                if(item.contains(item.querySelector(".under"))) {
                    item.querySelector(".under").style.display = "block";
                }
            });
        });
    </script>
</body>
</html>
Да, благодарю за позицию.
Но для решения такой задачи как мне представляется ul/li список не подходит.

Как это визуально выглядит сейчас прикрепил.
Сейчас в файле с JS 5000 строчек кода
Вложения
Тип файла: zip Пример.zip (3.72 Мб, 11 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2019, 02:19
Помогаю со студенческими работами здесь

Как правильно создать несколько потоков, вызывающий одну и ту же функцию?
Пробовал так: ... #include &quot;process.h&quot; ... __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ...

Собрать много таблиц в одну
Подскажите не опытному. Есть Table1...Table14 и Table99. В Table99 нужно запихнуть все 14 таблиц (таблицы с несвязными и разными...

Собрать значения в одну строку
Господа, не могли бы Вы помочь? У меня есть в экселе таблица, с очерченными границами для записей (см. аттачмент). Проблема в том,...

Собрать все листы в одну книгу
Добрый вечер! Прошуууу помогите! Заранее прошу Вас не ругаться, что объясняли это уже миллион раз)) Суть в следующем:...

Собрать значения из блоков в одну переменную
Доброй ночи всем:) Имеется такой код. &lt;div class=&quot;tagbox&quot;&gt; &lt;ul&gt; &lt;li&gt;&lt;span class=&quot;tag&quot;&gt;магазин&lt;/span&gt;&lt;span...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru