• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

querySelectorAll dodaje klasy do wszystkich elementów zamiast do jednego

Object Storage Arubacloud
0 głosów
167 wizyt
pytanie zadane 1 grudnia 2019 w JavaScript przez matir85 Bywalec (2,410 p.)

Mój problem polega na tym, że po zastosowaniu querySelectorAll i pętli for, która ma za zadanie przypisać do klikniętego przyciska klasę, która spowoduje wyświetlenie określonego tekstu w elemencie w zależności od klikniętego przycisku, klasa jest dodawana do wszystkich elementów co powoduje wyświetlenie wszystkich elementów a nie tylko tego klikniętego

Mój kod JS

let artNumber = document.querySelectorAll('.ArtNr');
let artTxt = document.querySelectorAll('.ArtTxt');
let i, j;

for (i = 0; i < artNumber.length; i++) {
    artNumber[i].addEventListener('click', function () {
        for (j = 0; j < artTxt.length; j++) {
            artTxt[j].classList.toggle('show');
        }

    });
}

 

1 odpowiedź

+1 głos
odpowiedź 1 grudnia 2019 przez lateM Pasjonat (17,660 p.)
wybrane 2 grudnia 2019 przez matir85
 
Najlepsza
*Przycisku!

Twój event działa tak: po kliknięciu jakiegokolwiek elementu o klasie "ArtNr" odpal pętlę for i dodaj lub usuń (toggle) każdemu elementowi o klasie "ArtTxt" klasę "show".

Musisz usunąć tą pętlę w evencie i nadawać klasę "show" tylko temu elementowi, który został kliknięty. Nie wiem, jak sobie te elementy pozagnieżdżałeś, ale wydaje mi się, że wystarczy użyć "this" lub wyszukać w klikniętym "ArtNr" odpowiadający mu "ArtTxt"
komentarz 1 grudnia 2019 przez matir85 Bywalec (2,410 p.)

Kombinowałem i nadal nie wiem jak mam zrobić aby to działało. Jak chcesz zobaczyć jak wygląda mój projekt to tu jest link do niego  https://github.com/matir85/Prawniczek

Tylko tam jest poprzednia wersja pliku script, gdzie nie było querySelectorAll tylko sam querySelector

komentarz 1 grudnia 2019 przez lateM Pasjonat (17,660 p.)
        let artNumber = document.querySelectorAll('.ArtNr');

        for (var i = 0; i < artNumber.length; i++) {
            artNumber[i].addEventListener('click', function () {
                this.nextElementSibling.classList.toggle('show');
            });
        }

Możesz np. zrobić tak, chociaż rozwiązanie nie jest idealne. Łapię pierwszy napotkany element występujący po aktualne klikniętym i zmieniam mu klasę. Możesz się teraz pobawić i zmodyfikować kod.

komentarz 2 grudnia 2019 przez matir85 Bywalec (2,410 p.)
Dzięki. Dopiero się uczę a raczej kończę HTML i CSS a JS jeszcze przede mną. Dlatego nie znałem jeszcze takiej metody jak nextElementSibling. Jeszcze raz dzięki za pomoc.

Podobne pytania

0 głosów
2 odpowiedzi 253 wizyt
0 głosów
1 odpowiedź 187 wizyt
0 głosów
1 odpowiedź 479 wizyt

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...