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

Javascript - skrócenie kodu

0 głosów
464 wizyt
pytanie zadane 13 czerwca 2020 w JavaScript przez Fonteinbloem Użytkownik (660 p.)

Witam, nie wiem jak skrócić ten kod js'a. Próbowałem na wiele sposobów, ale każdy z nich nie zadziałał lub nie dało się tego zrealizować. Proszę o jakąś sugestię w jaki sposób mogę to zrobić. 


var c0 = document.getElementById("c0");
var c1 = document.getElementById("c1");
var c2 = document.getElementById("c2");
var c3 = document.getElementById("c3");
var c4 = document.getElementById("c4");
var c5 = document.getElementById("c5");
var c6 = document.getElementById("c6");
var c7 = document.getElementById("c7");
var c8 = document.getElementById("c8");
var c9 = document.getElementById("c9");
var c10 = document.getElementById("c10");
var c11 = document.getElementById("c11");

c0.addEventListener('click', function () { revealCard(0)});
c1.addEventListener('click', function () { revealCard(1)});
c2.addEventListener('click', function () { revealCard(2)});
c3.addEventListener('click', function () { revealCard(3)});
c4.addEventListener('click', function () { revealCard(4)});
c5.addEventListener('click', function () { revealCard(5)});
c6.addEventListener('click', function () { revealCard(6)});
c7.addEventListener('click', function () { revealCard(7)});
c8.addEventListener('click', function () { revealCard(8)});
c9.addEventListener('click', function () { revealCard(9)});
c10.addEventListener('click', function () { revealCard(10)});
c11.addEventListener('click', function () { revealCard(11)});

 

komentarz 13 czerwca 2020 przez ScriptyChris Mędrzec (190,190 p.)

Próbowałem na wiele sposobów, ale każdy z nich nie zadziałał lub nie dało się tego zrealizować

To pokaż co próbowałeś zrobić (jeśli były jakieś błędy w konsoli, to je pokaż), a spróbujemy wytłumaczyć dlaczego nie działało.

komentarz 13 czerwca 2020 przez Fonteinbloem Użytkownik (660 p.)
for (i=0; i<possible_cards.length; i++) {
    var "c"+i = document.getElementById('"c"+i');
}

for (i=0; i<possible_cards.length; i++) {
    "c"+i.addEventListener('click', function () { revealCard(i)});
}

tego pierwszego for nie mogę w ogóle zrealizować, bo cudzysłowia się dziwnie zachowują i nie działają jak powinny działac, a przy drugim for wyskakuje błąd: main.js:57 Uncaught TypeError: i.addEventListener is not a function at main.js:57 (anonymous) @ main.js:57

komentarz 13 czerwca 2020 przez Comandeer Guru (607,330 p.)

Cudzysłowy się zachowują jak najbardziej poprawnie i robią to, co kazałeś im robić – chociaż nie jest to to, co chcesz, żeby robiły ;)

Zapis '"c"+i' oznacza po prostu "c"+i. Żeby zrobić konkatenację ciągów powinieneś zapisać to inaczej, jako 'c'+ i lub, w ES6, `c${ i }` (zwróć uwagę na użycie bacticka w tym drugim przypadku).

No i nie da się w taki sposób zadeklarować zmiennej. Poza tym – jaki cel ma przypisywanie elementów do poszczególnych zmiennych, skoro masz już kolekcję tych elementów (possible_cards)?

komentarz 13 czerwca 2020 przez Fonteinbloem Użytkownik (660 p.)
Moim pomysłem było stworzenie 10 zmiennych za pomocą pętli for, które będą uchwytami do div'ów, a potem dodanie do każdej z nich EventListener, ale teraz wiem, że się nie da w taki sposób zadeklarować zmiennej.

2 odpowiedzi

+1 głos
odpowiedź 13 czerwca 2020 przez Comandeer Guru (607,330 p.)
wybrane 13 czerwca 2020 przez ScriptyChris
 
Najlepsza
const elements = document.querySelectorAll( '[id^="c"]' );

elements.forEach( ( element ) => {
	element.addEventListener( 'click', ( { target } ) => {
		const cardId = Number( target.id.replace( 'c', '' ) );

		revealCard( cardId );
	} );
} );
  1. Pobierz wszystkie elementy, których [id] zaczyna się od "c".
  2. Dla każdego takiego elementu dodaj listener zdarzenia click i wyciągnij kliknięty element do zmiennej target.
  3. Ustal numer karty poprzez wyciągnięcie go z [id] elementu.
    1. Obetnij z [id] "c".
    2. Przekonwertuj tak uzyskany ciąg tekstowy na liczbę
  4. Pokaż odpowiednią kartę.
komentarz 13 czerwca 2020 przez Fonteinbloem Użytkownik (660 p.)
Dzięki!
0 głosów
odpowiedź 13 czerwca 2020 przez michal_php Stary wyjadacz (13,700 p.)
Spróbuj użyć pętli oraz let zamiast var.
komentarz 13 czerwca 2020 przez Fonteinbloem Użytkownik (660 p.)
Właśnie próbowałem użyć pętli, tylko że ona w ogóle nie działa. Poniżej  jest moja odpowiedź innemu użytkownikowi dlaczego.

Podobne pytania

0 głosów
2 odpowiedzi 594 wizyt
pytanie zadane 16 stycznia 2017 w HTML i CSS przez agit45 Obywatel (1,110 p.)
0 głosów
1 odpowiedź 446 wizyt
pytanie zadane 10 grudnia 2022 w JavaScript przez Dawidziu Bywalec (2,630 p.)
0 głosów
1 odpowiedź 2,439 wizyt
pytanie zadane 31 sierpnia 2015 w JavaScript przez scrafter Nowicjusz (140 p.)

93,630 zapytań

142,552 odpowiedzi

323,056 komentarzy

63,137 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2416p. - dia-Chann
  2. 2390p. - DziarnowskiJ
  3. 2317p. - raydeal
  4. 2242p. - Łukasz Piwowar
  5. 2222p. - CC PL
  6. 2184p. - Adrian Wieprzkowicz
  7. 2010p. - rucin93
  8. 1968p. - Michal Drewniak
  9. 1957p. - Maurycy W
  10. 1887p. - Łukasz Eckert
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1377p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...