Задать вопрос
@Speakermen

Можно ли ещё сократить код?

Вроде код дублируется значит в теории его можно ещё сократить или вынести в функцию?

titleElement.appendChild(
  create({
    el: "span",
    className: "currentTime",
    text: "00:00",
  })
);
titleElement.appendChild(
  create({
    el: "span",
    className: "duration",
    text: "00:00",
  })
);


  • Вопрос задан
  • 169 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Использовать цикл
const els = [
    ["author", "Author - "],
    ["name", "Name"],
    ["currentTime", "00:00"],
    ["duration", "00:00"],
];

els.forEach(el => {
    titleElement.appendChild(
        create({
            el: "span",
            className: el[0],
            text: el[1],
        })
    );
})


2

const els = [
    { el: "span", className: "author",      text: "Author - " },
    { el: "span", className: "name",        text: "Name" },
    { el: "span", className: "currentTime", text: "00:00" },
    { el: "span", className: "duration",    text: "00:00" },
];

els.forEach( el => titleElement.appendChild( create(el) ) );


Update

А вообще это разнородные элементы. Зачем их по отдельности генерировать. Пусть будет один единственный элемент (компонент) - title. Gecnm у него будет шаблон, и пусть вы будете в этот шаблон передавать данные

function renderTitle (d) {
 return `
  <div class="title">
    <span class="currentTime">${d.time}</span>
    <span class="author">${d.author}</span> –
    <span class="name">${d.name}</span>
    <span class="duration">${d.duration}</span>
  </div>
  `;
}
xxx.insertAdjacentHTML('beforeend', renderTitle({
  author:   'Author - ',
  name:     'Name',
  time:     '00:00',
  duration: '00:00',
}));
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Сделать массив:

const arr = [
  [      'author', 'Author - ' ],
  [        'name',      'Name' ],
  [ 'currentTime',     '00:00' ],
  [    'duration',     '00:00' ],
];

Который надо что? - правильно, перебрать, так или иначе:

for (const [ className, text ] of arr) {
  titleElement.appendChild(create({
    el: 'span',
    className,
    text,
  }));
}

// или

titleElement.append(...arr.map(n => create({
  el: 'span',
  className: n[0],
  text: n[1],
})));

// или, без всех этих ваших странных функций

document.querySelector('#root').innerHTML = `
  <div id="title">${arr.map(n => `
    <span class="${n[0]}">${n[1]}</span>`).join('')}
  </div>
`;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы