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

question-closed Cannot read property 'classList' of undefined

Object Storage Arubacloud
0 głosów
951 wizyt
pytanie zadane 19 czerwca 2017 w JavaScript przez szymonq Użytkownik (770 p.)
zamknięte 19 czerwca 2017 przez szymonq
var rows = $("tbody > tr:has(td > span > a.link)");
var number_of_rows = rows.size();
    
for(i = 0; i <= number_of_rows; i++){
var row_class = "row_" + i;
        rows[i].classList.add(row_class);
}

Witam, powyższy skrypt działa, czyli dodaje klasę wierszom w tabeli, ale chrome wywala w konsoli:

"ERROR: Execution of script 'MyScript' failed! Cannot read property 'classList' of undefined"

Próbowałem zamiast classList.add() użyć addClass() z jQuery, ale wtedy w ogóle nie działa. Proszę o wyjaśnienie co może być przyczyną tego problemu. Dopiero uczę się JSa i nie wiem jeszcze o pewnych niuansach.

 

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+2 głosów
odpowiedź 19 czerwca 2017 przez adrian17 Ekspert (344,860 p.)
wybrane 19 czerwca 2017 przez szymonq
 
Najlepsza

Próbowałem zamiast classList.add() użyć addClass() z jQuery, ale wtedy w ogóle nie działa

Co nie działa? Bo dokumentacja jQuery ma przykład dokładnie tego, co chcesz zrobić:

https://api.jquery.com/addclass/

Punkt "As of jQuery 1.4"

A co do obecnego kodu, po prostu błędnie używasz `<=` w pętli, przez co wychodzisz poza tablicę.

(inna sprawa: czemu chcesz żeby każdy wiersz miał inną klasę?)

komentarz 19 czerwca 2017 przez szymonq Użytkownik (770 p.)
edycja 19 czerwca 2017 przez szymonq

Dzięki wink naprawiłem pętle i nie wywala tego błędu, ale jak zamienię "classList.add()" na "addClass()" to nie działa i w konsoli jest błąd:

"ERROR: Execution of script 'MyScript' failed! rows[i].addClass is not a function"

Nie wiem co robię źle. Każdy wiersz musi mieć inną klasę bo z każdego chcę wyjąć oddzielnie określoną zawartość ;)

Edit: zamiast "rows[i].addClass(row_class)" dałem "$(rows[i]).addClass(row_class)" i działa :D Jeszcze raz wielkie dzięki ;)

Ostatecznie kod wygląda tak:

var rows = $("tbody > tr:has(td > span > a.link)");
var number_of_rows = rows.size();
    
for(i = 0; i < number_of_rows; i++){
        var row_class = "row_" + i;
        $(rows[i]).addClass(row_class);
}

 

komentarz 19 czerwca 2017 przez adrian17 Ekspert (344,860 p.)

Ostatecznie kod wygląda tak:

Um, zignorowałeś to co napisałem. W dokumentacji jest napisane jak dokładnie zaimplementować dokładnie to co chciałeś, bez ręcznych pętli.

komentarz 19 czerwca 2017 przez szymonq Użytkownik (770 p.)

Nie doczytałem, ale nieważne bo i tak znalazłem lepsze rozwiązanie niż dodawanie klasy każdemu wierszowi tabeli.

Dzięki za uwagę, na przyszłość będę wiedział że mogę zrobić to bez pętli wink

Podobne pytania

0 głosów
0 odpowiedzi 383 wizyt
0 głosów
2 odpowiedzi 1,592 wizyt

92,572 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!

...