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

createElement

0 głosów
404 wizyt
pytanie zadane 30 listopada 2017 w JavaScript przez lapacz.kornel Mądrala (6,930 p.)

Mam taki kod: 

core.e = function(tag, param1, param2) {
  const element = document.createElement(tag);

  const setAttrs = attrs => {
    Object.keys(attrs).forEach(attr => {
      element.setAttribute(attr, attrs[attr]);
    });
  };

  const setChilds = childs =>{
    if(typeof childs === 'string') childs = [new Text(childs)];

    childs.forEach(child => {
      element.appendChild(child);
    });
  };

  if(arguments.length === 2) {
    setChilds(param1);
  } else {
    setAttrs(param1);
    setChilds(param2);
  }

  return element;
};

Coś jest źle? 

1
komentarz 30 listopada 2017 przez kap Stary wyjadacz (11,620 p.)
Nie ma takiego słowa jak childs -> one child, two children
komentarz 30 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)

No tak, to jest błąd surprise.

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

A co jeszcze jest źle (bo uwierzę, że wszystko poza sprawami językowymi zrobiłem dobrze wink)

komentarz 30 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)
core.e = function(tag, param1, param2) {

Dlaczego to nie jest arrow function?

komentarz 30 listopada 2017 przez kap Stary wyjadacz (11,620 p.)
edycja 30 listopada 2017 przez kap
A co ty zagadki zadajesz? Nie napisałeś co ten kod ma robić i jakie komunikaty błedów dostajesz, tudzież jaki jest spodziewany wynik a jaki faktyczny, dla jakich inputów nie działa zgodnie z zamierzeniami. Próbowałeś to debuggować (chociażby prymitywnym console.logiem)? Cy może działa, a pytasz co można zrefaktorować?
komentarz 30 listopada 2017 przez kap Stary wyjadacz (11,620 p.)
@Krzycho92 Pewnie dlatego, że arrow nie ma pseudotablicy arguments (co jest git, nie jest do niczego potrzebna).
komentarz 30 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

@kap pseudo-tablicy arguments można się pozbyć i wtedy ten fragment:

if(arguments.length === 2) {

zamienić na:

if ( tag && param1 ) {
komentarz 1 grudnia 2017 przez kap Stary wyjadacz (11,620 p.)
@Krzycho92 Wiem że się można pozbyć, napisałem przecież "nie jest do niczego potrzebna".
Btw - te dwie wersje to nie są odpowiedniki - sprawdzasz tam zupełnie co innego - czy dwa pierwsze parametry są truthy.
komentarz 1 grudnia 2017 przez lapacz.kornel Mądrala (6,930 p.)

Cy może działa, a pytasz co można zrefaktorować?

 Debugowałem i wsztstko działa, chyba chodziło mi o to refaktorowanie...

Arrow function nie użyłem bo nie ma tablicy arguments

1 odpowiedź

–3 głosów
odpowiedź 30 listopada 2017 przez Vorex444 Dyskutant (9,610 p.)
const element = document.createElement(tag);

tag w ' '
komentarz 30 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
? Nie do końca zrozumiałem.
komentarz 30 listopada 2017 przez Vorex444 Dyskutant (9,610 p.)
cudzysłowach
komentarz 30 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)
edycja 30 listopada 2017 przez lapacz.kornel

Dalej do końca nie rozumiem. Tag ma być stringiem, przykład:

$.core('h1', {style: 'background-color: red;'}, 'SomeH1');

 

Podobne pytania

+1 głos
2 odpowiedzi 166 wizyt
0 głosów
1 odpowiedź 207 wizyt
pytanie zadane 14 lipca 2020 w JavaScript przez grudzin Początkujący (320 p.)
0 głosów
4 odpowiedzi 215 wizyt
pytanie zadane 23 września 2018 w JavaScript przez EteerYT Początkujący (480 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...