Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.10.2019
Сообщений: 3

Замена класса "active" (работает), необходимо понять логику

01.10.2019, 13:15. Показов 1715. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, часто встречающийся тут и везде рабочий код, но прошу объяснить несколько моментов, иначе дальше в понимании jQuery и JS будут, видимо, проблемы...
По-мере непонимания:
1. По-логике, я должен был бы выбирать имеющийся класс .active и если я щелкаю не по нему, то найти его и убрать... Но скрипт работает со всеми соседними и родительскими классами, кроме .active, причем эти классы одинаково принадлежат всем элементам на которых бы я не щелкал...
Отсюда далее:
2. Что тогда находится в (this)? И:
3. Если в (this) находится щелчок по отличному от .active элементу, то как тогда removeClass ищет .active, перебором что ли? Короче, not(this) как работает?
4. Ну, и в плане дополнительной информации. Почему автор присваивает все это переменным? Во многих образцах этого кода они отсутствуют?

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ul class="navbar">
    <li class="nav-item ">
        <a class="nav-link active" href="#item1">Home</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="#item2">Our story</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="#item3">Tenant</a>
    </li>
        <li class="nav-item">
            <a class="nav-link" href="#item4">Owner</a>
        </li>
</ul>
JavaScript
1
2
3
4
5
6
$(function() {
    var navLink = $('.nav-link').on('click', function() {
    navLink.not(this).removeClass('active');
    $(this).addClass('active');
    });
});
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2019, 13:15
Ответы с готовыми решениями:

Понять логику
Да, я настолько начинающий, что нахожусь на этом уровне :) Есть задача: вывести массив в обратном порядке, не используя reverse и...

Не могу понять логику
Ребята подскажите в чем ошибка. Вот часть кода: Public Class Connect Public x As Integer, y As Integer 'Координата точки...

Понять логику insert into
Добрый день. Я в SQL второй день и никак не могу понять логику. Очевидно что тут дело в инсерте и селекте, но я не могу понять, что...

5
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.10.2019, 11:22
Лучший ответ Сообщение было отмечено Floater как решение

Решение

Здравствуйте.
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
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <style>
        .active {
            color: red;
        }
    </style>
</head>
<body>
    <ul class="navbar">
        <li class="nav-item ">
            <a class="nav-link active" href="#item1">Home</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#item2">Our story</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#item3">Tenant</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#item4">Owner</a>
        </li>
    </ul>
    <script>
        $(function () {
            var navLink = $('.nav-link');
            navLink.on('click', function () {
                navLink.not(this).removeClass('active');
                $(this).addClass('active');
            });
        });
    </script>
</body>
</html>
Поехали разбирать.
Цитата Сообщение от Floater Посмотреть сообщение
Но скрипт работает со всеми соседними и родительскими классами, кроме .active,
Скрипт работает с классом .nav-link, что в принципе логично.
То есть при загрузке страницы выполняется функция, в которой на все элементы с классом .nav-link навешивается обработчик на click.
Цитата Сообщение от Floater Посмотреть сообщение
Что тогда находится в (this)?
То же, что и в штатном this. Этот элемент, на который непосредственно навешан обработчик события.

Цитата Сообщение от Floater Посмотреть сообщение
Если в (this) находится щелчок по отличному от .active элементу, то как тогда removeClass ищет .active, перебором что ли? Короче, not(this) как работает?
Тут используется скрытая особенность jQuery, что в скобках после доллара всегда хранится коллекция элементов.

Про коллекцию элементов постоянно хочется забыть ))
"Ты суслика видишь? Нет. А он есть."

not(element) - из коллекции удаляет один элемент. Остается коллекция всех остальных, кроме этого элемента.

Цитата Сообщение от Floater Посмотреть сообщение
Почему автор присваивает все это переменным?
Автор слегка промахнулся с переменной. Мы заюзаем переменную в более логичном смысле.
------
Именно постоянное забывание про коллекции после доллара периодически делает скрипт непонятно функционирующим.
Бывает.
Кстати, то же самое легко написать и на нативном JavaScript, где перебор коллекции будет откровенным, и не будет противоречить деменции программиста.
1
0 / 0 / 0
Регистрация: 01.10.2019
Сообщений: 3
03.10.2019, 13:58  [ТС]
Получается, что при навешивании обработчика там хранится массив со всеми элементами, которые ждут клика? И когда он происходит очищаются ВСЕ остальные элементы, кроме кликнутого, независимо есть там .active или нет?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.10.2019, 14:32
Цитата Сообщение от Floater Посмотреть сообщение
И когда он происходит очищаются ВСЕ остальные элементы, кроме кликнутого, независимо есть там .active или нет?
Да. Но .active останется всегда один. Который кликнули, тот должен быть .active

Если интересно, повторите перебор элементов без jQuery в синтаксисе современного JavaScript. Лучше поймете.
Тогда можно будет и просто проверять наличие .active и удалять класс только при его наличии.

Добавлено через 3 минуты
----
Вот ещё костыль для jQuery, который скрывает от программиста новый перебор элементов:
https://basicweb.ru/jquery/jqu... filter.php

Добавлено через 12 минут
----
Ещё секретный вариант - запомнить отдельно прежний выбранный элемент в переменную.
И без всякого перебора нанести высокоточный сокрушительный удар по конкретно этому элементу.
1
0 / 0 / 0
Регистрация: 01.10.2019
Сообщений: 3
03.10.2019, 14:41  [ТС]
Спасибо, все вроде дошло...
Но, вот это

Ещё секретный вариант - запомнить отдельно прежний выбранный элемент в переменную.
И без всякого перебора нанести высокоточный сокрушительный удар по конкретно этому элементу.
по-моему, самое правильное решение...
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.10.2019, 14:42
Floater, ну так хорошая мысля приходит опосля.
Иногда 20 лет проходит, прежде чем крупная фирма выпустит хорошую и логически правильную версию своей программы.
(Можно далеко не ходить - Javascript)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2019, 14:42
Помогаю со студенческими работами здесь

Как понять логику?
Здравствуйте уважаемые форумчане, очень нуждаюсь в вашей помощи! Я пишу аналог ф-и array_diff_uassoc(пишу, чтобы лучше понимать и и уметь...

Последовательность чисел. Понять логику
Есть ряд чисел и их соответствий (в первом ряде не бывает чисел от 0 до 5) Второй ряд обычное десятичное число CFCAC6C6C6C6C6C9 ---...

Понять логику asm кода
Есть некий кусок asm кода (взят с бинарника, подогнан под Visual Studio C++): unsigned int delta1 = 600; unsigned int delta2 = 1100;...

Нужно понять логику кода
Есть код который с одной системы счисления переводит значения в любую другу систему счисления, код работает но я не могу понять как именно,...

Как понять логику PHP
$one_symbol = mb_substr($num_phone,0,1); if (strlen($num_phone) &lt; 10 &amp;&amp; $one_symbol != &quot;9&quot;){ $result_form = &quot;Номер...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru