Разработать мини-библиотеку для поиска элементов на Vanilla JS

Цена договорная • электронные деньги
14 декабря 2016, 23:51 • 9 откликов • 71 просмотр
Мы делаем SaaS-сервис, для интеграции с которым Клиенты будут подключать на странице специальный JavaScript-файл. На разных сайтах могут использоваться разные библиотеки (jQuery / Underscore и др), поэтому мы не завязываемся на стороннее решение и реализовываем нужный нам функционал в виде внутренней мини-библиотеки, синтаксис которой будет для удобства максимально схож с jQuery; функционал — урезан до нужного нам; а поддержка браузеров ограничится только теми, доля которых превышает 1% по статистике GlobalStats.

Сейчас нам нужно написать очень сильно упрощенный аналог Sizzle, библиотеки, используемой jQuery для поиска элементов по CSS3-селекторам. При этом набор возможностей и используемых селекторов ограничен и регламентирован:

<script>
// Можно выбирать по названию класса
$('.some-elm');
// Можно выбирать по ID
$('#someElm');
// Можно выбирать по названию тега
$('input');
// Можно выбирать любые элементы (разумеется, это будет иметь смысл в рамках контекста)
$('*');
// Можно выбирать по точному соответствую атрибута
$('[name="email"]');
// Можно сочетать селекторы применительно к одному элементу
$('input[name="email"]');
$('label.special.for_email');
$('#header.callout');
// Селекторы можно группировать, определяя вложенность элементов (с любой вложенностью)
$('.parent-elm .child-elm');
// Можно задавать родительское взаимотношение элементов
$('.container > .children');
$('.container > .children > *');
// Селекторы можно перечислять через запятую, чтобы объединить результаты
$('textarea, input[type="text"]');
// Вторым аргументом можно задавать DOM-элемент, определяющий контекст поиска
$('textarea, input[type="text"]', document.body);
</script>

Нужно реализовать только перечисленные выше возможности, т.к. мы максимально экономим место.

По сути, необходимо на чистом JS написать одну функцию — $, которая реализует обозначенный выше функционал в обозначенных выше браузерах. Это отличная возможность попрактиковаться в Vanilla JS!

Предлагайте стоимость и сроки, а также приложите ссылку на 2-3 ваших работы на JavaScript. (Оптимально — ссылку на GitHub).