Pull to refresh

DOM-библиотека Laconic

Reading time2 min
Views1.3K
Original author: Joe Stelmach
Laconic обеспечивает интуитивный подход к генерированию DOM джаваскриптом. Исходный код Laconic выложен на Гитхабе.

При использовании стандартного DOM API для создания вложенных друг в друга элементов простой таблицы потребовался бы вот какой код:

ворох кода
var firstTh = document.createElement('th');
firstTh.appendChild(document.createTextNode('first name'));
var secondTh = document.createElement('th');
secondTh.appendChild(document.createTextNode('last name'));
var firstTr = document.createElement('tr');
firstTr.appendChild(firstTh);
firstTr.appendChild(secondTh);
var firstTd = document.createElement('td'); 
firstTd.appendChild(document.createTextNode('Joe'));
var secondTd = document.createElement('td'); 
secondTd.appendChild(document.createTextNode('Stelmach'));
var secondTr = document.createElement('tr');
secondTr.appendChild(firstTd);
secondTr.appendChild(secondTd);
var table = document.createElement('table');
table.appendChild(firstTr);
table.appendChild(secondTr);
document.body.appendChild(table);

Такой код много обширнее, чем это уместно — так что по его виду угадать результат его работы трудно. Теперь взгляните на более лаконический способ создания той же таблицы:

$.el.table(
  $.el.tr(
    $.el.th('first name'),
    $.el.th('last name')),
  $.el.tr(
    $.el.td('Joe'),
    $.el.td('Stelmach'))
).appendTo(document.body);

Laconic добавляет в пространство имён $.el по одному методу для каждого из известных элементов HTML. Этим методам при их запуске передаётся список аргументов, имеющий переменную длину и состоящий из дочерних элементов, строк, чисел, или массивов элементов этих типов. Первым аргументом метода может быть необязательный объект, содержащий атрибуты элемента. Вот пример:

$.el.div({'class' : 'example'}, 
  $.el.div('content'));

Код этого примера создаст такую структуру элементов:

<div class='example'>
  <div>content<div/>
</div>

Если вы работаете с нестандартными элементами, то можно вызвать непосредственно $.el, указав имя элемента в качестве первого параметра. Например, результат нижеследующего примера будет тождественен предыдущему:

$.el('div', {'class' : 'example'},
  $.el.div('content'));

Если некоторую конструкцию из элементов HTML вам приходится создавать часто, то можете зарегистрировать их в качестве особого элемента. Вам придётся дать ему имя и указать функцию, которая добавляет необходимое содержимое к this, потому что this служит ссылкою на корневой узел. Вот пример:

$.el.registerElement('element', function(one, two) {
  this.appendChild($.el.div(one));
  this.appendChild($.el.div(two));
});

Зарегистрировав такой элемент, вы можете вставлять его:

$.el.element('first', 'second').appendTo(document.body);

Этот вызов создаст желаемую структуру элементов:

<div class='element'>
  <div>first</div>
  <div>second</div>
</div>
Tags:
Hubs:
Total votes 22: ↑14 and ↓8+6
Comments14

Articles