Сегодня я хочу представить ещё две полезные proof-of-concept функции, которые используются мной достаточно часто (и очень облегчают жизнь, надо отметить). Я назвал их концептуальными, потому что не надо видеть в них знаки свыше, а воспринимать лишь как побуждение к размышлениями о бытье JavaScript-функциональности и расширяемости.
Создание иерархии элементов
Достаточно часто приходится в JavaScript создавать иерархию элементов. Сделать это можно двумя путями: традиционным и с помощью DOM. Традиционный путь представляет собой использование свойства innerHTML объекта HTMLElement, чтобы «на ходу» создавать иерархию HTML-элементов. Второй же путь является более правильным с философской точки зрения, так как обеспечивает использование DOM-методов для работы с DOM-деревом (он действительно может работать чуть медленнее, чем первый вариант, но если посмотреть на этот вопрос со стороны парсинга HTML, который снова и снова происходит при использовании свойства innerHTML, то становится даже понятным, почему вариант с DOM должен быть не медленнее варианта с innerHTML).
Поэтому нам нужна такая функция, которая по определённому пути создаст иерархию указанных элементов. Просто и полезно. Путь может быть, к примеру, таким: ul/li/a, чтобы создать список с одним элементом li с ссылкой внутри него. После этого мы можем добавлять новые элементы в список, используя путь li/.
Напомню, что для получения объекта по идентификатору я использую кастомный метод с короткой записью $:
Попробуем создать этот метод:
Теперь привяжем его к объектам:
Давайте возьмём простой HTML-код и изменим его с помощью нашей функции:
Мы добавили элемент li к нашему списку и установили его содержимое в «New». Теперь у нас список из двух элементов.
Данную функцию можно улучшить, например, придав ей возможность учитывать классы имён, номера элементов в дереве, установку атрибутов на лету и многое другое, но такие усложнения остаются на вашей совести, а мы переходим к следующей функции.
Траверсинг элементов
Под траверсингом элементов подразумевается в нашем случае применение определённой функции-обработчика к большому количество элементов. Это бывает полезно, когда, например, необходимо добавить обработчик какого-либо действия на элементы, находящиеся в другом элементе (как, например, в списках).
Давайте реализуем её таким образом:
Маленькая, но удобная. Добавим её к нашим объектам:
Попробуем её применить на нашем предыдущем обновлённом списке:
Добавим каждому элементу обработчик клика мышкой:
Как получилось
А получилось, я думаю, просто, эстетично и практично. По крайней мере, мне они пришлись по вкусу. Не люблю фреймворки, а сделать свои рутины самостоятельно всегда приятно и полезно для осознавания принципов работы некоторых алгоритмов задач. Это всё на сегодня. Удачной вам новой недели.