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

Mała biblioteka DOM

Object Storage Arubacloud
0 głosów
324 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez lapacz.kornel Mądrala (6,930 p.)

Co sądzicie?

const $ = sel => ({
    els: typeof sel === 'string' 
      ? [...document.querySelectorAll(sel)]
      : sel.length
      	? [...sel]
        : [sel],
    
    each(call) {
    	this.els.forEach((el, i) => call(el, i));
    	return this;
    },
    
    on(type, listener) {
      this.each((el, i) => el.addEventListener(type, listener.bind(this, el, i,)));
    	return this;
    },
    
    ready(call) {
    	this.on('DOMContentLoaded', call);
    }
    
});

Bardzo prosta implementacja nowych funkcji np:

    hide() {
      this.each(el => el.style.display = 'none')
      return this;
    },
     
    filter(condition) {
        this.els = this.els.filter(condition)
        return this;
    }

 

komentarz 26 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

Moim zdaniem zbyt mała czytelność kodu w property els.

Nagłówek funkcji też mógłby być bardziej czytelny. Zamiast:

const $ = sel => ({

, zapisać:

const $ = (sel) => {
    return {

Od razu wiadomo, że to funkcja i zwraca obiekt.

komentarz 26 listopada 2017 przez niezalogowany
Ciekawy pomysł. Będziesz minifikował jak ostatnio? : )
komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)

Czy ja wiem, czy takie nieczytelne, operator warunkowy zastosowano też w kodzie źródłowym Vue.js. Jak bym miał to rozpisać na ify dla mnie byłoby bardziej nieczytelne. Tu jest rozpisane.

komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
Taaak. Dużo z funkcji queryAll zaciągnąłem.

1 odpowiedź

+1 głos
odpowiedź 26 listopada 2017 przez Comandeer Guru (600,810 p.)

Czemu listener dostaje takie dziwne parametry?

Implementację each można skrócić:

each( call ) {
    this.els.forEach( call );
    return this;
}

 

komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)

Masz (jak zwykle) rację wink


Jakie listener powinien dostawać parametry? Index niepotrzebny?

2
komentarz 26 listopada 2017 przez Comandeer Guru (600,810 p.)
Takie, jakie dostaje normalnie: obiekt zdarzenia i tyle.
komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
Ustawić element na którym jest wywołane zdarzenie jako this czy to nie ma sensu?
1
komentarz 26 listopada 2017 przez Comandeer Guru (600,810 p.)
Można, ale co jak ktoś Ci jako listener podeśle arrow function?
komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
W jQ z tego, co kojarzę, element jest pod this więc jak się chce mieć do niego dostęp jest się skazanym na funkcję tradycyjną  (?)

EDIT: To jest złe podejście?
1
komentarz 26 listopada 2017 przez Comandeer Guru (600,810 p.)

Element, który został kliknięty, można pobrać z event.target. Element, do którego przypięto listener jest z kolei dostępny pod event.currentTarget.

komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
Czyli jeśli ktoś podeśle arrow function będzie musiał użyć event.target. Coś za coś...
komentarz 26 listopada 2017 przez Comandeer Guru (600,810 p.)

Ja zawsze używam event, bo wolę, żeby this wskazywało na obiekt, w którego scope listener został stworzony :)

komentarz 26 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)

Żeby nie zakładać nowego pytania... 

    delegation(type, target, listener) {
        this.on(type, evt => {
            if(evt.target && evt.target.matches(target)) {
                listener(evt);
            }
        });
    }

są jakieś błędy?

Podobne pytania

0 głosów
0 odpowiedzi 144 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez lapacz.kornel Mądrala (6,930 p.)
0 głosów
2 odpowiedzi 245 wizyt
pytanie zadane 18 czerwca 2023 w JavaScript przez Piotrek2713 Mądrala (5,340 p.)
0 głosów
2 odpowiedzi 232 wizyt

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

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

...