вторник, 27 сентября 2011 г.

DOM2 наступил на jQuery

- и похоже окончательно раздавил этого монстра. Да да именно монстра который последние годы терроризировал весь инет своими сжатыми мегабайтами непонятного назначения и еще более непонятного содержания.
-- а что это за эта jQuery
Да эта такая штука которая практически зависает теперь во всех сайтах Рунета. Вот на Ярушке ее зачем то поставили.
-- а может она нужна?
Хорошая вещь я сам от нее балдел - было время, но меня подвело любопытство. Я полез в потроха как самый обычный любопытный мальчишка, чтобы посмотреть как это чудище устроено, и такое увидел, что после - начал искать альтернативу
--- ой как интересно, а ну расскажи я тоже хочу -
Потом , потом как нибудь. Лучше давай все же уделим время ее убийце. Это намного интереснее., чем монстр маниакального вида, но как всегда на глиняных ногах.

Итак ты знаешь чтобы в в документе найти ссылку на любой объект используется набор специальных функций, которые все просматривают документ, с точки зрения его структуры. Смотри вот пример
<table id="score">
<thead>
<tr>
<th>Тесты
<th>Результат
<tbody>
<tr>
<td>A
<td>87%
<tr>
<td>B
<td>78%
<tr>
<td>C
<td>81%
<tfoot>
<tr>
<th>ИТОГО
<td>82%
</table>
- на странице он выглядит так
ТестыРезультатt
A87%
B78%
C81%
ИТОГО82%
И тогда чтобы найти к примеру объект документа имеющие идентификатор, то ты использующий одну функцию, а элементы имеющие определенные тэги - другую функцию. Еше есть и другие атрибуты, как классы и имена
-- ты меня совсем запутал)) -
Так вот раньше к примеру чтобы выполнить такое логическое заключение и найти
-- все вторые столбцы этой таблицы, которые несут результат измерения, и их по порядку скомпоновать в массив., то для этого сначала нужно было просканить весь документ и собрать всю информацию о таблице, а потом уже в полученном массиве выбрать нам нужную. Я не буду приводить здесь весь скрипт, а коснусь только констатацией того что он достаточно большой, и то что появления пакетов обрабатывающих сложные запросы, такие как jQuery - были в свое время необходимы, пока сами браузеры не стали реализовывать эти функции впрямую с помощью откомпилированных и вложенных в браузер.
Да эти функции используют более сложные правила формирования запросов, которые так же использует и jQuery и другие, но скрипт-пакеты это не одна сотня не скомпилированного текста , каждый раз когда ты открываешь страницу в инете , перекачивается с сервера в твой браузер, синтаксически распознается на правильность, компилируется и исполняется, И все это требует затрат , а то : сервера, канала связи, браузера, и твоего компа - а ресурсы эти вовсе не маленькие и они жрут, как и память, так и время. И есть еще одно - это твоя безопасность, которую могут в громадных потоках нарушить злоумышленники, подсунув вместо того что тебе передает сервер , что то свое опасное.
-- а согласна, полностью согласна --
Вот мы браузерники и решили сделать за скрипт пакеты работу и во-первых сократить поток ненужного скрипта, переместив его внутрь браузера изначально. Теперь тебе не надо при вычислении сложной функции загружать еще и несколько сотен килобайт поддержки , а просто воспользоваться тем что у тебя есть на браузере смотри вот как это выглядит
var cells = document.querySelectorAll("#score>tbody>tr>td:nth-of-type(2)");
Это всего строчка которая по синтаксису состоит из запроса функций, а их две - я потом объясню почему их две с аргументами в виде селектора CSS.

Синтаксис
element = document.querySelector(selectors);
где
  • element - совокупность объектов для результата
  • document - обрабатываемый документ, и необязательно чтобы он бы корневой
  • selectors - селекторная формула, по которой производится сканирование документа, с поиском необходимого результата. Представляет собой строку


Функции и их результат
Теперь пришло время остановиться на том , что есть две функции. Это querySelector и querySelectorAll
и они обе имеют одинаковый синтаксис и применение, ено выдаваемый результат у них разный. Более общей функцией - служит querySelectorAll . Именно она и выполняет поиск объектов по формуле селекции, выдавая результат в виде объекта или списка всех Node. Если элемент один, то результат все равно тот же, но размерностью в один элемент. Чтобы получить массив - нужно произвести преобразование результата так
Array.prototype.slice.call(результат)

Для того чтобы отбросить массив или взять первый элемент множества, то лучше использовать функцию querySelector
Ну вот вроде и все об этих функциях. А об их применении мы поговорим на следующем занятии.