@olegkurbatov

Как правильно строить целый блок на странице с помощью javascript?

Тяну из json файла инфу.
Вставлял на сайт ее в таком виде:
news.forEach(function(news) {
            var article = document.createElement('article');
            article.className = "block-news__news";
            article.innerHTML = '<span><h2 class="block-news__header">'+news.header+'</h2><time class="block-news__date">'+news.date+'</time></span><p id="'+news.preId+news.id+'">'+news.content+'</p><a class="block-news__more" id="'+news.id+'" href="#">more ></a>'

            divNews.insertBefore(article, divNews.children[1]);
        });


Но эта строка innerHTML она очень нечитабельна... Вообще не доходит как сделать иначе. Как "расписать" структуру этого блока по нормальному?

как исправить это уродство?
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 4
Krasnodar_etc
@Krasnodar_etc
fundraiseup
news.forEach(function(news) {
            var article = document.createElement('article');
            article.className = "block-news__news";
            article.innerHTML = '
                              <span>
                                  <h2 class="block-news__header">'+news.header+'</h2>
                                  <time class="block-news__date">'+news.date+'</time> 
                              </span>
                              <p id="'+news.preId+news.id+'">'+news.content+'</p>
                              <a class="block-news__more" id="'+news.id+'" href="#">more ></a>'

            divNews.insertBefore(article, divNews.children[1]);
        });


Сработает же, да?)
Ответ написан
В похожей ситуации подключил haml-js. Всю разметку хранил в haml-шаблонах на стороне сервера. Далее, я подгружал haml-шаблон при помощи $.load, передавая в него набор данных для рендера собственно haml-движком, и после рендера отображал полученные данные.

Код, к сожалению, не могу скинуть за давностью дел, но алгоритм я вам подсказал. Красиво, чисто, без уродства. Явный минус - быстродействие - можно легко устранить при помощи какого-нибудь localStorage: тогда шаблон придется загружать с сервера только единожды.
Ответ написан
@olegkurbatov Автор вопроса
news.forEach(function(news) {
var article = document.createElement('article');
var span = document.createElement('span');
var h2 = document.createElement('h2');
var time = document.createElement('time');
var p = document.createElement('p');
var a = document.createElement('a');

article.className = "block-news__news";
h2.className = "block-news__header";
time.className = "block-news__date";
a.className = "block-news__more";

h2.innerHTML = news.header;
time.innerHTML = news.date;
p.innerHTML = news.content;
a.innerHTML = 'more >';
a.href = '#';

divNews.insertBefore(article, divNews.children[1]);
article.appendChild(span);
span.appendChild(h2);
span.appendChild(time);
article.appendChild(p);
article.appendChild(a);
});

Перепилил, так будет лучше, но правильно ли?
Ответ написан
@RidgeA
Вот могу посоветовать еще шаблонизатор для клиента
basisjs.com/templates
Достаточно быстрый и с биндингом.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы