tokenize – это javascript функция, которая собирает референсы в удобную структуру с ветками, подветками и листьями (ссылками на DOM элементы)
Функция tokenize принимает следующие аргументы:
- a. корневой DOM элемент, начало рекурсии (при старте приложения, обычно это document.body), обязательный аргумент;
- b. Ваш объект-контейнер или экземпляр Вашего объекта/класса, в который будут собираться найденные ветки и листья. Если не указан или логическое ЛОЖЬ – объект-контейнер будет создан;
- c. булевой аргумент. Если логическая ИСТИНА – найденные атрибуты удаляться не будут;
- d. целочисленный аргумент – уровень вложенности для рекурсии. Если не указан или логическое ЛОЖЬ – без ограничений;
- e. строковой аргумент – имя родительского объекта (имя токена).
Рекурсивно вызываемая, на каждом DOM элементе, функция tokenize, путём простого перебора, ищет атрибуты, имена которых маркированы спецсимволами:
- * "звёздочка" – токен-ветка (объект-контейнер или экземпляр объекта);
- ^ "карет" – токен-лист (ссылка на DOM элемент).
Я выбрал именно эти спецсимволы, так-как только эти хорошо заметны (зрительно) в гипертексте.
Имена атрибутов без "*" и без "^" (а в случае "звёздного" атрибута, то так же и без имени пользовательского объекта/класса, при наличии), используется как имя токена. И в родительском объекте создаётся параметр с этим именем, который ассоциируется с объектом или с ссылкой на DOM элемент. Перед ассоциированием имена токенов проверяются на конечную последовательность двух символов "[]" (квадратные скобки). При нахождении оных, они удаляются из имени токена, и в родительском объекте создаётся параметр-массив (если он ещё не создан), в который и добавляется (методом push) новый объект или ссылка на DOM элемент.
В объекте, созданном при нахождении атрибута со звёздочкой, будь то объект-контейнер или экземпляр пользовательского объекта/класса, создается параметр с именем "_" (нижнее подчёркивание), который ассоциируется с DOM элементом. Этот же объект и имя его токена будет передаваться аргументами при рекурсивном вызове tokenize`а.
Предварительно имена "звёздных" атрибутов проверяются на наличие в них имени пользовательского объекта/класса, указанного через знак "-" (минус). При нахождении подобного, tokenize попытается создать экземпляр объекта (если этот объект присутствует в родительском объекте или в глобальном контексте и доступен через window[искомое]), передав в его конструктор следующие аргументы (по порядку):
- ссылка на элемент, которому принадлежит найденный атрибут;
- значение "звёздного" атрибута (value);
- родительский объект-ветка;
- имя родительского объекта (имя токена).
Important
Предупреждаю заранее. Так-как браузеры lowercase`ят атрибуты html элементов, использовать заглавные буквы в именах пользовательских объектов/классов не получится.
Возможности tokenize не ограничены только лишь его начальным вызовом, при старте приложения. К примеру, если во время работы приложения, каким-либо способом было получен новый контент и вставлен где-либо в DOM дереве через "innerHTML", то этот новый контент может быть "токенизирован" отдельно, путём вызова tokenize на том элементе, куда был вставлен новый контент.