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

question-closed Błąd z string.indexOf()

Object Storage Arubacloud
0 głosów
125 wizyt
pytanie zadane 29 kwietnia 2021 w JavaScript przez Piotr Kułakowski Początkujący (390 p.)
zamknięte 30 kwietnia 2021 przez ScriptyChris

Cześć,

Właśnie kończę jedną stronę i natknąłem się na błąd, który nie wiem skąd się wziął. O to kod, którego błąd dotyczy:

const substringOfHrefAttributes = (prefix, locationPathNameBeforePushState) => {
    const header = document.querySelector('.header');
    const phoneHeader = document.querySelector('.phone-header');
    const phoneMenu = document.querySelector('.phone-menu');
    const footer = document.querySelector('.footer');

    const aLinks = [Array.from(header.querySelectorAll('a')), Array.from(phoneHeader.querySelectorAll('a')), Array.from(phoneMenu.querySelectorAll('a')), Array.from(footer.querySelectorAll('a'))].flat();

    aLinks.forEach(aLink => {
        const hrefAttr = aLink.getAttribute('href');
        const indexOfPrefix = hrefAttr.indexOf(prefix);
        console.log(hrefAttr, indexOfPrefix);
        const prefixOfALink = hrefAttr.slice(0, indexOfPrefix + prefix.length);
        const targetOfALink = aLink.getAttribute('target');

Błąd dotyczy 14 linki kodu powyżej, o to on:

image

Tutaj jeszcze daję wywołanie tej funkcji i od razu mówię, że view.prefix jest zdefiniowane:

substringOfHrefAttributes(view.prefix, locationPathNameBeforePushState);

Może się wydawać że powinienem wiedzieć skąd ten błąd ale już mówię o co chodzi. Otóż jak wyświetlam tą zmienną w konsoli, której dotyczy błąd (linijka 15 pierwszej części kodu) to już wyświetla mi poprawną wartość tak jak by wszystko zadziałało pozytywnie, a mimo to wywala mi błąd.

błąd razem z console.log - iem :

image I teraz nie wiem o co chodzi bo niby coś nie działa i wywala mi błąd przy tworzeniu tej zmiennej, ale jak już ją wyświetlam w konsoli to wszystko jest ok, tak jak by działało. Ta sytuacja dzieje się zarówno w Firefox jak i w Brave oraz Chrome. Jeśli ktoś wie o co może chodzić, to prosiłbym o pomoc.

Z góry dziękuję i pozdrawiam.

komentarz zamknięcia: Problem rozwiązany w komentarzu
komentarz 29 kwietnia 2021 przez ScriptyChris Mędrzec (190,190 p.)

W konsoli wyświetlasz te zmienne po linijce, w której rzekomo znajduje się błąd. Więc jeśli błąd się pojawia, to console.log nie zostanie wywołany. Żeby się dowiedzieć, czy hrefAtr faktycznie jest nullem, gdy pojawia się błąd, to podziel console.log na dwa: jeden dla hrefAtr (wstaw go tuż pod deklaracją tej zmiennej) i drugi dla indexOfPrefix. Możesz dodatkowo w pierwszej linijce callbacka do forEach (czyli w 10 linijce wstawionego bloczka) dodać console.dirxml('aLink:', aLink), żeby dowiedzieć się jakie atrybuty posiada ten anchor.

[edycja]

Błąd dotyczy 14 linki kodu powyżej

Na pewno 14, a nie 11? Jedyny indexOf w tym kodzie jest w linii 11.

komentarz 29 kwietnia 2021 przez Wiciorny Ekspert (270,170 p.)
ja nawet po staku widzę że błąd leci z lini 18-stej.
1
komentarz 29 kwietnia 2021 przez ScriptyChris Mędrzec (190,190 p.)
Ale kod z bloczka nie koniecznie pokazuje cały kod. Więc linijki wskazane w stacku błędu nie muszą pokrywać się z tym, co jest w bloczku.
2
komentarz 30 kwietnia 2021 przez Piotr Kułakowski Początkujący (390 p.)

@ScriptyChris,
zrobiłem to co radziłeś w pierwszym komentarzu i rzeczywiście jeden z linków jakie pobierałem nie miał atrybutu href. Zamieniłem go więc na buttona bo nie ma sensu, żeby był to link skoro nigdzie nie przekierowuje. Jeszcze raz dziękuję.

1 odpowiedź

0 głosów
odpowiedź 29 kwietnia 2021 przez Wiciorny Ekspert (270,170 p.)
const hrefAttr = aLink.getAttribute('href');

z debuguj co to zwraca funkcja getAtribute, i czym u Ciebie jest  "hrefAttr", bo zwraca Ci to element, który nie posiada funkcji indexOf 

stad nie  możesz wywołać na tym elemencie indexOf. 

  const indexOfPrefix = hrefAttr.indexOf(prefix);

bo na razie wnioskuje, że nie istnieje wskazany atrybut dla elementu który wpisałeś, byc może to zły element jest :)  i aLink to nie jest link i nie posiada tego atrybutu 

Podobne pytania

0 głosów
0 odpowiedzi 162 wizyt
0 głosów
1 odpowiedź 266 wizyt
0 głosów
3 odpowiedzi 1,224 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...