@SeRGaN_87

Как сделать скрипт отборки по имени и значению атрибута?

Доброго дня, делая учебный проект на основе пересечений блоков ( observerIntersection ), когда при скроллинге подсвечивается раздел оглавления , застопорился на том, что не могу совершить отборку определенного класса по атрибуту, значение которого генерируется в переменной, хотелось бы сделать это при помощи дата-атрибутов, имена и значения которых будут одинаковы (например: У Части-1 будет тот же дата-атрибут и значение, как у секции-1). По задумке: клацнув оглавление , пользователь должен плавно скролиться на соответствующий раздел, но у меня не получается отобрать нужную секцию по атрибуту, значение которого генерировалось бы в переменной test! С шаблонной строкой тоже не получилось, пожалуйста помогите!
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./style.css">
    <title>Active-class-with-observer</title>
</head>

<body>
    <nav class="nav-menu">
        <ul class="nav-menu__list">
            <li class="nav-menu__item" data-TOC="1">Часть 1</li>
            <li class="nav-menu__item" data-TOC="2">Часть 2</li>
            <li class="nav-menu__item" data-TOC="3">Часть 3</li>
            <li class="nav-menu__item" data-TOC="4">Часть 4</li>
            <li class="nav-menu__item" data-TOC="5">Часть 5</li>
        </ul>
    </nav>
    <article class="section-list">
        <section class="section section-1" data-TOC="1">Секция-1</section>
        <section class="section section-2" data-TOC="2">Секция-2</section>
        <section class="section section-3" data-TOC="3">Секция-3</section>
        <section class="section section-4" data-TOC="4">Секция-4</section>
        <section class="section section-5" data-TOC="5">Секция-5</section>
    </article>
</body>

<script>
    
    const sectionList = document.querySelectorAll('.section');
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                    document.querySelectorAll('.nav-menu__item').forEach((li) => {
                    li.classList.toggle('active', li.dataset.toc === entry.target.dataset.toc);
                });
            }
        });
    }
        , {
            threshold: 0.7
        });

    sectionList.forEach((section) => {
        observer.observe(section)
    });

    document.querySelector('.nav-menu').addEventListener('click', (event) => {
        if (event.target.classList.contains('nav-menu__item')) {
            let test = event.target.dataset.toc;
            console.log(test);
            window.scrollTo({
                top: document.querySelector('.section[data-TOC="test"]').offsetTop,   // <-- проблема здесь     
                behavior: 'smooth',
            });
        }
    });

</script>
</html>
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
document.querySelector(`.section[data-TOC="${test}"]`)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы