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

JS - selektor elementów zwraca null

Object Storage Arubacloud
0 głosów
209 wizyt
pytanie zadane 4 lipca 2019 w JavaScript przez kralcz88 Obywatel (1,810 p.)

Witam!

Mam dziwny problem z kodem poniżej. Otóż do zmiennej w JS nie zostaje przypisany dany element DOM. Zwracana wartość to null.

Co ciekawe, selektory działają bo gdy wpiszemy je w konsoli to wybiera poprawny element.

 

<body>
	<div class="hamburgerWrapper">
	<div class="hamburgerInner"></div>
	</div>
</body>
const hamburgerWrapper = document.querySelector('.hamburgerWrapper');

const hamburgerInnerBefore = document.getElementsByClassName('hamburgerInner')[0];

 

2 odpowiedzi

+2 głosów
odpowiedź 4 lipca 2019 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 4 lipca 2019 przez kralcz88
 
Najlepsza
a gdzie odpalasz skrypt JS, nie czasem w sekcji head, gdy jeszcze nie masz drzewka DOM? Przesuń JS na koniec body i daj znac czy to jest to, czy szukamy dalej :)
komentarz 4 lipca 2019 przez kralcz88 Obywatel (1,810 p.)
Shame on me.

To chyba znak, żeby dziś dać sobie już spokój i odpocząć :)
komentarz 4 lipca 2019 przez kralcz88 Obywatel (1,810 p.)
Pytanie dodatkowe - a czy jest możliwe wybrać w JS pseudoelement ::before lub ::after ?
komentarz 4 lipca 2019 przez Tomek Sochacki Ekspert (227,510 p.)

jest, np.:

getComputedStyle(document.querySelector('selector'), ':after').getPropertyValue('content')

 

komentarz 4 lipca 2019 przez kralcz88 Obywatel (1,810 p.)
Tylko, że to wygląda tak jakby getCompytedStyle pozwoliło mi tylko pobrać właściwości danego elementu, a ja docelowo chciałbym pseudoelmentom nadać nowe właściwści CSS, a dokładnie chciałbym transform: rotate(-90deg) translateX(6px);
1
komentarz 4 lipca 2019 przez Chess Szeryf (76,710 p.)
edycja 4 lipca 2019 przez Chess

Napisz może setProperty dla ustawienia dynamicznie stylu CSS lub zastosuj kod poniżej.

body::before {
  content: "hello";
}
<body style="background: darkolivegreen;">
var declaration = document.styleSheets[0].rules[0].style;
console.log(declaration);
declaration.cssText = "content: 'hello2';";
</body>
komentarz 4 lipca 2019 przez kralcz88 Obywatel (1,810 p.)

Kombinuje coś w tym stylu, ale teraz z kolei konsola wyrzuca błąd, że nie widzi elementu:

 

const hamburgerWrapper = document.querySelector('.hamburgerWrapper');


hamburgerWrapper.addEventListener('click', function(){
	window.getComputedStyle(this,':after').style.setProperty('opacity', '0');
});

 

1
komentarz 4 lipca 2019 przez Comandeer Guru (600,810 p.)

Użyj zmiennych CSS albo po prostu nadaj klasę elementowi, który ma pseudoelement i w taki sposób go ostyluj,

komentarz 4 lipca 2019 przez Chess Szeryf (76,710 p.)
  • The object from getComputedStyle is read-only, and should be used to inspect the element's style — including those set by a <style> element or an external stylesheet.

Źródło - MDN.

Nie możesz ustawić parametru dla getComputedStyle, ponieważ to jest tylko do odczytu, nie do zapisu. Skorzystaj więc z innej właściwości.

komentarz 4 lipca 2019 przez kralcz88 Obywatel (1,810 p.)

@Comandeer, tak właśnie zrobiłem i teraz wszystko gra. Problemem było tylko to że ja chciałem atakować pseudoelement o obiektu na którym będzie wywołany event. Na szczęście zapięcie klasy z CSS pomogło

.open::affter {...}

+1 głos
odpowiedź 4 lipca 2019 przez xmentor Nałogowiec (49,520 p.)
Kod JS daj przed `</body>`. Możliwe, że próbujesz pobrać elementy zanim te pojawiają się w DOM.
komentarz 4 lipca 2019 przez Chess Szeryf (76,710 p.)

@Tomek Sochacki był szybszy o około 45 sekund z tą samą odpowiedzią (ten sam sens).

komentarz 4 lipca 2019 przez xmentor Nałogowiec (49,520 p.)
miałem odpalone pytanie, nie odświeżyłem i nie widziałem :)

Podobne pytania

0 głosów
2 odpowiedzi 160 wizyt
pytanie zadane 26 października 2019 w HTML i CSS przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 425 wizyt
0 głosów
1 odpowiedź 290 wizyt
pytanie zadane 28 marca 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...