YASS — это небольшая JavaScript-библиотека для выбора элементов из DOM-дерева по CSS-селекторам. Она поддерживает некоторые наиболее распространенные комбинации CSS-селекторов, которые приведены в CSS3-спецификации.
_ или yassОсновная функция для выбора элементов получает на вход 3 параметра: сам CSS-селектор, корневой элемент для выборки (по умолчанию берется document) и параметр noCache для сброса кэша по заданному селектору (кэщ будет автоматически сброшен для современных браузеров, но для IE его нужно сбрасывать вручную после изменений в HTML).
Более подробно примеры использования приведены в соответствующей секции.
.example),span или div,div p a),>,~,+,#id,*,[type=checkbox] атрибуты с точным значением (class отработает по совпадению подстроки),[title] — существование атрибута у элемента,[rel~=nofollow] — наличие в атрибуте заданной строке в качестве значения, разделенного пробелами,[class^=block] — значение атрибута, начинающееся с заданного значения,[class$=hidden] — или заканчивающегося ею,[alt*=image] — соответствие подстроки значения атрибута заданной,[alt!=image] — отсутствие в атрибуте заданной строке в качестве значения, разделенного пробелами,:first-child, :last-child,:empty,HTML) через :root,:checked,:nth-child(3),:nth-child(even), :nth-child(odd), :nth-child(2n+1),:lang.Все допустимые комбинации этих селекторов будут работать через вызов функции _(), в том числе влючая наборы селекторов, разделенных запятой ",". Возвращаемое значение будет либо одним узлом DOM-дерева, либо набором таких узлов. Если ни один элемент не соответстует заданному селектору, то YASS вернет null.
Некоторые селекторы пока еще не поддерживаются. Вполне возможно, что ситуация изменится с выходом новых версий YASS.
:not(...),[class=class1][class=class2].YASS является весьма гибкой библиотекой для подключения совершенно произвольных внешних JS-файлов как модулей. Например, можно динамически полностью загрузить Prototype или jQuery со всеми плагинами сразу после загрузки ядра YASS. Для этого нужно написать следующий код:
<script src="yass.js" type="text/javascript" class="yass-module-jquery"></script>
В этом примере:
yass.jquery.js, который расположен там же где и исходный HTML-файл. И произойдет это по событию DOM ready.Также можно загрузить любой внешний файл как модуль YASS. Например:
<script src="yass.js" type="text/javascript" class="yass-module-http://yass.webo.in/airee_ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
В конце кода для каждого модуля можно:
Вызвать какое-то действие по загрузке всего дерева зависимостей для данного модуля. Зависимости записываются в классе произвольного узла DOM-дерева, например:
<div class="yass-module-base-jquery"></div>
В этом случае модуль jquery зависит от модуля base, и окончательное событие load не будет вызвано, пока вся цепочка зависимостей не загрузится полностью.
Задать логику обработчика события загрузки модуля можно через init:
_.modules[modules_name]['init'] = function(){...}
Для модуля base искомый код будет выглядеть (в конце файла yass.base.js):
_.modules['base']['init'] = function(){...}
Динамически сформировать дерево зависимостей в процессе загрузке. Для этого в конце загружаемого модуля достаточно вызвать _.init(module_dependency + '-' + module_name), где module_dependency — модуль, от которого зависит загруженный. Тогда событие load не будет вызвано, пока не загрузится этот новый модуль.
Вызвать любой обработчик сразу после загрузки самого JS-файла (в обход любых зависимостей). Для этого нужно записать в title искомого DOM-узла:
<div id="jquery" class="yass-module-jquery" title="$('jquery').html('jQuery загружена через YASS')"></div>
Сразу после загрузки и инициализации yass.jquery.js будет вызван код, заключенный в атрибуте title.
Тажке можно использовать выделенное пространство имен для хранения специфичных параметров или объектов. Это пространство расположено в _.modules[module_name]. Там уже находятся некоторые предопределенные переменные и объекты:
_.modules[module_name].status указывает на текущее состояние соответствующего модуля (0 — еще не загружен, 1 — в процессе загрузки, 2 — загружен, 3 — ожидает разрешения зависимостей, -1 — не может быть загружен)._.modules[module_name].yass — хэш модулей, которые зависят от данного._.modules[module_name].deps — массив модулей, от которых зависит данный._.modules[module_name].notloaded — число незагруженных зависимостей._.modules[module_name].deps.yass — хэш модулей, от которых зависит данный.Крайне рекомендуется использовать данное пространство имен для всех специфических переменных, связанных с модулем, чтобы исбежать захламления глобальной области видимости.
Дополнительные примеры использования данной логики можно подчерпнуть из онлайн-демонстрации загрузки дерева модулей.