Московский государственный технический университет имени Н.Э. Баумана Факультет «Информатика и системы управления» Кафедра «Компьютерные системы и сети» Р.С. Самарев Javascript. Добавление динамического поведения HTML. Средства отладки. Электронное учебное издание Методические указания к выполнению лабораторной работы № 2 и практикума №2 по дисциплинам «Языки Интернет программирования» и «Практикум по Интернет программированию» Москва (С) 2014 МГТУ им. Н.Э. БАУМАНА
44
Embed
Javascript. Добавление динамического поведения HTML ...e-learning.bmstu.ru/moodle/pluginfile.php/3198/mod...Версия 1.0 была реализована
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Московский государственный технический университет
имени Н.Э. Баумана
Факультет «Информатика и системы управления»
Кафедра «Компьютерные системы и сети»
Р.С. Самарев
Javascript. Добавление
динамического поведения HTML.
Средства отладки.
Электронное учебное издание
Методические указания к выполнению
лабораторной работы № 2 и практикума №2
по дисциплинам «Языки Интернет программирования» и
«Практикум по Интернет программированию»
Москва
(С) 2014 МГТУ им. Н.Э. БАУМАНА
2
УДК 004.43
Рецензент: Мартынюк Владимир А., к.т.н., доцент каф. РК6 МГТУ им. Н.Э. Баумана
Самарев Р.С.
Javascript. Добавление динамического поведения HTML. Средства отладки.
Электронное учебное издание.– М.: МГТУ имени Н.Э. Баумана, 2014. 44 с.
Представленные методические указания предназначены для проведения
лабораторной работы и практикума на языке Javascript. Приводятся минимально
необходимые сведения о языке Javascript, которых достаточно для проведения
работ. Рассмотрены подробные примеры, на основе которых лабораторная работа
может быть выполнена. Приводятся контрольные вопросы и порядок выполнения
работ. Для желающих получить дополнительные сведения приводится
исчерпывающий список литературы и ссылки на интернет-источники.
Для студентов МГТУ имени Н.Э. Баумана, обучающихся на кафедре ИУ6 по
направлению 230000 Информатика и вычислительная техника.
Рекомендовано учебно-методической комиссией факультета «Информатика
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
3
Оглавление
Введение.............................................................................................................................................4Лабораторная работа № 2..................................................................................................................5
Цель работы...................................................................................................................................5Теоретическая часть......................................................................................................................6
Краткие сведения о Javascript..................................................................................................6Document Object Model (DOM) и программирование в браузере......................................18Средства отладки....................................................................................................................28
Задание.........................................................................................................................................30Требования к отчету....................................................................................................................31Литература...................................................................................................................................33
Практикум № 2.................................................................................................................................34Цель работы.................................................................................................................................34Задание.........................................................................................................................................35Требования к отчету....................................................................................................................36Контрольные вопросы................................................................................................................37
Заключение.......................................................................................................................................38Приложение. Библиотеки jQuery. Dojo..........................................................................................39
Библиотека jQuery.......................................................................................................................39Библиотека Dojo..........................................................................................................................42
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
4
Введение
Методические указания предназначены для проведения лабораторной работы и
практикума на языке Javascript и ориентированы на студентов, не имеющих опыта
программирования на данном языке. В работе приводятся минимально необходимые
сведения о языке Javascript, а также подробные примеры, на основе которых лабораторная
работа может быть выполнена. Для закрепления теоретических знаний предлагается
ответить на контрольные вопросы. Для желающих получить дополнительные сведения
приводится исчерпывающий список литературы и ссылки на интернет-источники.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
5
Лабораторная работа № 2
Цель работы
Целью работы является изучение основных принципов программирования на языке
Javascript, изучение способов обхода узлов модели документа DOM, изучение принципов
динамического формирования кода страницы HTML, а также получение практических
навыков отладки Javascript-приложений.
Объем работы — 2 часа.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
6
Теоретическая часть
Краткие сведения о Javascript
Javascript – это объектно-ориентированный скриптовый язык программирования.
Является диалектом стандартизованного языка ECMA_262 (версия 3) European Computer
Manufacturer’s Association (ECMA).
Язык с динамической типизацией, автоматическим управлением памяти. Версия 1.0 была
реализована в Netscape 2.0, март 1996. Предназначен для использования в веб-приложениях.
Позднее область применения была расширена. В настоящее время активно используется как
для выполнения программ на стороне веб-браузера, так и на стороне веб-сервера для
упрощения интеграции с «тяжелыми» веб-приложениями. Кроме того, в программных
продуктах Mozilla активно используется для программирования интерфейса настольных
приложений в составе технологии XUL.
Подключение Javascript в HTML
В HTML-документах Javascript при помощи одного и того же элемента <script> может
быть внедрён в тело документа или подключен внешний ресурс.
В случае внедрения в тело документа Javascript-код вставляется между тегами <script> и
Логический тип имеет значения true или false аналогично boolean в C++. Поддерживается
почти аналогичный набор логических операций. Пример логической операции:
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
11
if (a == 4) b = b + 1;else a = a + 1;
Имеется дополнительный оператор тождественного сравнения = = = (троекратное =),
который отличается от == (двойное =) тем, что операнды должны совпадать по типу, а
неявное преобразование к ним не будет применено:
if (a === "4") // только строки! b = b + 1;
if (a === 0) // только число 0 b = b + 1;
if (a == 0) // число 0 или пустая строка b = b + 1;.
Имеющиеся операторы сравнения представлены в таблице 1. Для определённости
примем, что предварительно выполнено присвоение x=5.
Таблица 1 Операторы сравнения Javascript
Оператор Описание Пример (x=5) Результат== Равенство x==8
x==5falsetrue
=== Равенство с учетом типа x==="5"x===5
falsetrue
!= Неравенство x!=8 true !== Неравенство с учетом типа x!=="5"
x!==5truefalse
> Больше x>8 false < Меньше x<8 true >= Больше или равно x>=8 false <= Меньше или равно x<=8 true
Поддерживаются следующие выражения, позволяющие организовать ветвление процесса:
if (condition) { …} else { …}variablename=(condition)?value1:value2 switch(n){case 1: // выполняется блок 1 break;case 2: // выполняется блок 2 break;default: // выполняется в том случае, если n не равно 1 или 2}
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
12
Циклы
Выражения для формирования циклов в Javascript аналогичны C/C++ за исключением
конструкции for (item in list){…}, которая подставляет переменной item значение из списка.
for (i=0; i<5; i++) { x=x + "The number is " + i + "<br />";}
while (i<5) { x=x + "The number is " + i + "<br />"; i++;}
do { x=x + "The number is " + i + "<br />"; i++;} while (i<5);
var person={fname:"John",lname:"Doe",age:25}; for (x in person) { txt=txt + person[x]; }
Функции
Функции в Javascript задаются в форме:
function sum (a,b) // декларируем функцию sum с двумя аргументами{ return a+b;}
Обратите внимание на то, что возвращаемый результат не декларируется явно.
Передаваемые параметры a, b не имеют декларируемого типа, однако попытка передать
значения неправильного типа приведут к ошибке при выполнении кода!
Существует возможность определить функциональный литерал в следующей форме:
var sum = function sum (a,b) { return a+b; };
В дальнейшем использование sum будет выглядеть аналогично явно определенной
функции, однако реальную функцию в sum можно в любой момент переопределить.
Объекты
Объект – это коллекция именованных значений, которые обычно называют свойствами
(properties) объекта. Причем в Javascript они могут быть добавлены при выполнении!
Пример:
var point = new Object(); // создаём пустой объект !!!point.x = 2.3; // присоединяем свойство xpoint.y = 1.2; // присоединяем свойство y
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
13
Обращение к свойствам может производиться либо в форме:
point.x
либо в форме ассоциативного массива:
point["x"]
Объектные литералы позволяют задавать значения объектов в коде. Объектные литералы
var base = 1024;var table = [base, base+1, base+2, base+3];
Переменные и их области видимости
Переменные в Javascript не имеют типа! Тип имеет только значение переменной, поэтому
переменная, которая не была инициализирована конкретным значением, не может иметь
тип. Более того, одна и та же переменная может принимать значения различных типов в
разные моменты времени, однако всегда можно проверить, была ли переменная вообще
инициализирована. Отметим, впрочем, что не стоит использовать переменную с одним и тем
же именем для хранения значений разных типов, поскольку это потенциально приведёт к
трудно обнаруживаемой ошибке.
Javascript позволяет определять глобальные и локальные переменные. Отсутствует
блочная видимость в том виде, как это реализовано в языках C и C++.
Пример:
function test(o) { var i = 0; // i определена во всей функции if (typeof o == "object") { var j = 0; // j определена везде, а не только в блоке for(var k = 0; k < 10; k++) { // k определена везде, не только в цикле document.write(k); } document.write(k); // k все еще определена: печатается 10 } document.write(j); // j определена, но может быть не инициализирована}
Основной принцип распространения видимости переменных следующий: переменные
доступны в текущей функции и во всех вложенных функциях (то есть определённых в коде
этой функции). Глобальные переменные, то есть переменные, определенные вне функций,
доступны везде.
var x = function(){var i;mul = function(b) { return i*b; }for(fact = i = 1; i < 10; i++) {
Локальными переменными являются аргументы функций, а также переменные, не
найденные в контексте выше, либо объявленные со служебным словом var.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
15
Пример:
var scope = "глобальная";function f() { alert(scope); // Показывает "глобальная". scope = "локальная"; // Переменная глобальная. alert(scope); // Показывает "локальная"}f();alert(scope); // Показывает "локальная"
Укажем внутри функции декларацию var scope.
var scope = "глобальная";function f() { alert(scope); // Показывает "undefined", а не "глобальная". var scope = "локальная"; // Переменная инициализируется здесь, // но определена она везде в функции. alert(scope); // Показывает "локальная"}f();alert(scope); // Показывает "глобальная".
Переменные могут не декларироваться, однако для того, чтобы объявить глобальную
переменную необходимо либо объявить её со служебным словом var, либо присвоить
значение.
Пример, который вызовет ошибку:
function f1() { scope = "123"; // Переменная инициализируется здесь alert(scope);}function f2() { alert(scope); // Переменная нигде не объявлена}
Добавим переменную scope явно
var scope;function f1() { scope = "123"; // Переменная инициализируется здесь alert(scope);}function f2() { alert(scope);}f2();// Показывает "undefined"f1();// Показывает "123"f2();// Показывает "123"
Зададим переменной scope значение типа строка:
var scope = "";function f1() { scope = "123"; // Переменная инициализируется здесь alert(scope);}
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
16
function f2() { alert(scope);}f2();// Показывает "" (пустая строка)f1();// Показывает "123"f2();// Показывает "123"
Основные операторы и инструкции
Язык Javascript имеет сходство с языками С++ и Java, поэтому в виду ограниченного
объема изложения, подробно останавливаться на операторах не будем. Отметим, что в
Javascript существуют арифметические, логические, побитовые операторы и операторы
сравнения, а также инструкции типа if, while, switch, for, break, continue и пр. Подробнее их
следует изучить в главах 5 и 6 книги [1].
Объекты и классы
Язык Javascript является объектно-ориентированным языком, но не имеет классов в
понимании классов С++ или Java.
Любая переменная может получить значение-объект. Если ни одна переменная не хранит
ссылку на этот объект, он будет удалён. Явно высвобождать память после использования
объекта не требуется. Каждый из объектов конструируется самостоятельно. При этом
объекту могут быть динамически назначены свойства и методы.
Воспользуемся примерами из [1].
// Определяем конструктор.// Обратите внимание, как инициализируется объект с помощью "this".function Rectangle(w, h) { this.width = w; this.height = h;}
// Вызываем конструкторы для создания двух объектов Rectangle.// И проинициализируем оба новых объекта.var rect1 = new Rectangle(2, 4); // rect1 = { width:2, height:4 };var rect2 = new Rectangle(8.5, 11); // rect2 = { width:8.5, height:11 };
В роли конструктора объекта выступает функция Rectangle. При этом для добавления
свойств объекта использован указатель this.
Добавить метод к конкретному объекту можно следующим образом:
r.area = function() { return this.width * this.height; }// Теперь рассчитать площадь, вызвав метод объектаvar a = r.area();
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
17
Добавить метод так, чтобы объект получал его на этапе вызова конструктора можно
Указанный способ не является оптимальным. В данном примере созданный объект имеет
три свойства (area – тоже свойство, имеющее после создания объекта функциональный тип),
причём любое из них может принять любое значение. Это не соответствует концепции
класса с постоянными методами.
Для решения данной проблемы разработан механизм прототипов. Любой объект имеет
указатель на прототип. В момент создания объекта устанавливает ссылка на конструктор
прототипа, которым является функция-конструктор, создавшая объект. Ссылка на прототип
объекта указывает на свойство prototype функции-конструктора. Методы и свойства,
добавленные прототипу будут доступны любому объекту, созданному такой функцией-
конструктором.
Пример создания класса Circle:
// Конструкторfunction Circle(radius) { // r – свойство экземпляра объекта, оно определяется // и инициализируется конструктором. this.r = radius;}// Circle.PI – свойство класса (общее для всех объектов), свойство конструктора.Circle.PI = 3.14159;
// Метод для экземпляра, который рассчитывает площадь круга.// Аналог методов класса C++Circle.prototype.area = function( ) { return Circle.PI * this.r * this.r; }
// Метод класса (аналог статических методов в C++)// принимает два объекта Circle и возвращает объект с большим радиусом.Circle.max = function(a,b) { if (a.r > b.r) return a; else return b;}
// Примеры использования каждого из этих полей:var c = new Circle(1.0); // Создание экземпляра класса Circlec.r = 2.2; // Установка свойства экземпляра rvar a = c.area(); // Вызов метода экземпляра area()var x = Math.exp(Circle.PI); // Обращение к свойству PI классаvar d = new Circle(1.2); // Создание другого экземпляра класса Circlevar bigger = Circle.max(c,d); // Вызов метода класса max()
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
18
Document Object Model (DOM) и программирование в браузере
Объектная модель документа DOM является программным интерфейсом для доступа и
манипулирования документом (документ в терминологии SGML/HTML/XML).
Координирующая роль в DOM принадлежит консорциуму W3C - http :// www . w 3. org / DOM /.
Напомним, что HTML-страница является документом со строгой разметкой. Модель
DOM позволяет получить доступ, как к элементам разметки, так и свойствам,
позволяющими управлять браузером (получить доступ к текущему документу, открыть окно
с новым документом, получить данные из другого документа), а также установить
обработчики событий на определенные действия мыши, клавиатуры, таймера и пр. Отдельно
обрабатываются формы.
Основной принцип программирования с использованием JavaScript заключается в
управлении свойствами браузера и манипулировании элементами документа, согласно
модели DOM.
Базовый уровень функциональности документа обеспечивается объектами,
поддерживаемыми даже самыми старыми браузерами. Эта иерархия объектов представляет
объектную модель документов уровня 0 (Document Object Model level0 - DOM0), которая
исторически появилась до официальных спецификаций W3C. Приведем схему из главы 13
из книги [1] см. рисунок 2.
Рисунок 2 Модель DOM 0. Основные объекты.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
Текущее окно
self,window,parent, top,различные объектыWindow
screenобъект Screen
navigatorобъект Navigator
locationlобъект Location
historyобъект History
documentобъект Document
frames[]Массив объектов Window
forms []массив объектов Form
anchors []массив объектов Anchor
links []массив объектов Link
images []массив объектов Image
applets []массив объектов Applet
embeds []массив объектов Embed
options []массив объектов Option
elements []массив объектов элементов HTML-форм:TextCheckBoxRadioSelectTextareaPasswordButtonResetSubmitHiddenFileUpload
Более сложный пример манипулирования элементами списка:
<!DOCTYPE html><html><head><title>Сортировка списка. Дэвид Флэнаган. JavaScript.</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
Node
Document
CharacterData
Element
Attr
HTMLDocument
Text
Comment
HTMLElement
HTMLHeadElement
HTMLBodyElement
HTMLTitleElement
HTMLParagraphElement
HTMLInputElement
HTMLTableElement
… и другие
25
<script> function sortkids(e) {
// Это элемент, потомки которого должны быть отсортированыif (typeof e == "string") e = document.getElementById(e);// Скопировать дочерние элементы (не текстовые узлы) в массивvar kids = [];for(var x = e.firstChild; x != null; x = x.nextSibling)
if (x.nodeType == 1 /* Node.ELEMENT_NODE */) kids.push(x);
// Выполнить сортировку массива на основе текстового содержимого// каждого дочернего элемента. Здесь предполагается, что каждый// потомок имеет единственный вложенный элемент – узел Textkids.sort(function(n, m) { // Функция сравнения для сортировки
var s = n.firstChild.data; // Текстовое содержимое узла nvar t = m.firstChild.data; // Текстовое содержимое узла mif (s < t) return -1; // Узел n должен быть выше узла melse if (s > t) return 1; // Узел n должен быть ниже узла melse return 0; // Узлы n и m эквивалентны
});// Теперь нужно перенести узлыпотомки обратно в родительский элемент// в отсортированном порядке. Когда в документ вставляется уже// существующий элемент, он автоматически удаляется из текущей позиции,// в результате операция добавления этих копий элементов автоматически// перемещает их из старой позиции. Примечательно, что все текстовые узлы,// которые были пропущены, останутся на месте.for(var i = 0; i < kids.length; i++) e.appendChild(kids[i]);
}</script></head><body>
<ul id="list"> <!—Этот список будет отсортирован ><li>один<li>два<li>три<li>четыре<li>пять<!-- элементы не в алфавитном порядке --></ul><!-- кнопка, щелчок на которой запускает сортировку списка --><button onclick="sortkids('list')">Сортировать по алфавиту</button>
</body></html>
Часто бывает полезно вставить элементы не как объекты, а как HTML текст. Для этого
существует свойство innerHTML. Однако помните, что использование этого свойства
полностью удалит все дочерние элементы, если они были у владельца innerHTML.
Пример заполнения заголовка в таблице у созданного элемента table:
var table = document.createElement("table"); // Создать элемент <table>table.border = 1; // Установить атрибут// Добавить в таблицу заголовок Имя|Тип|Значениеtable.innerHTML = "<tr><th>Имя</th><th>Тип</th><th>Значение</th></tr>";
Обработка событий
Рассмотрим следующий код
<!DOCTYPE html><html><head>
<title>Вывод структуры страницы.</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style>
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
// По идентификатору находим элемент, // в который надо поместить результатvar result = document.getElementById('result');result.innerHTML = "<hr/><p>"+Date()+"</p>" +
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
33
Литература
1. Флэнаган Д. JavaScript. Подробное руководство. – Пер. с англ. – СПб: СимволПлюс,
2008. – 992 с., ил.
2. Бер Бибо, Иегуда Кац. jQuery. Подробное руководство по продвинутому JavaScript. -
Пер. с англ. - СПб.:Символ-Плюс, 2009. - 384 с., ил.
3. jQuery in Action. Серия: High Tech. Издательство: Символ-Плюс, 2009 г. Мягкая
обложка, 384 стр.
4. Расселл М. Dojo. Подробное руководство – Пер. с англ. – СПб.: Символ-Плюс, 2009. –
560 с., ил.
5. Rawld Gill, Craig Riecke, Alex Russell. Mastering Dojo. JavaScript and Ajax Tools for
Great Web Experiences. The Pragmatic Bookshelf, Raleigh, North Carolina Dallas, Texas,
2008.- 545 p.
6. Расселл М. Dojo. Подробное руководство – Пер. с англ. – СПб.: Символ-Плюс, 2009. –
560 с., ил.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
34
Практикум № 2
Цель работы
Целью работы является закрепление навыков программирования на языке Javascript с
использованием модели документа DOM, навыков управления реакцией элементов на
страницах HTML и отладки Javascript-приложений.
Объем работы — 4 часа.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
35
Задание
Разработать страницу для оформления заказа товаров.
1. Реализовать форму для ввода наименования и стоимости. При нажатии на кнопку
«Добавить», добавить введенные значения в таблицу.
2. Сделать кнопку расчёта стоимости заказа.
3. Поставить обработчик на изменение фона ячеек таблицы со стоимостью в тот
момент, когда над ними находится указатель мыши.
4. Подготовить страницу, содержащую таблицу товаров и их стоимости. На базе этой
страницы обеспечить возможность выбора строк и добавления их в таблицу
формирования заказа.
Примечание: в качестве усложненного варианта задания допустимо использовать
библиотеки jQuery и Dojo.
В отчете привести код страницы с программой формирования таблицы, формы,
отображаемые на экране и пример работы программы.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
36
Требования к отчету
Отчет должен содержать:
• ФИО студента и номер группы.
• Наименование лабораторной работы.
• Название выполненного пункта и тексты реализованных HTML с указанием имен
файлов.
Отчет должен быть предоставлен в электронном виде в формате pdf или odt.
Зачет за выполнение работы ставится при условии выполнения всех пунктов задания,
демонстрации работы программы, наличия отчёта и устных ответов на контрольные
вопросы.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
37
Контрольные вопросы
1. Являются ли эквивалентными следующие выражения Javasctipt?
a=1; b=3;
и a=1b=3
Ответ
2. Какова область видимости переменной в Javasctipt? Какие средства существуют для
ограничения области видимости?
Ответ
3. Возможно ли включение кода на Javascript внутри HTML-элемента <body>?
Ответ
4. Каково назначение свойства innerHTML?
Ответ
5. Для чего предназначены свойства HTML-элемента onclick, onMouseOut,
onMouseOver?
Ответ
6. Каково назначение методов alert(...), console.log(...)?
Ответ
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
38
Заключение
Представленных материалов должно быть достаточно для изучения основных принципов
программирования на языке Javascript, способов обхода узлов модели документа DOM,
принципов динамического формирования кода страницы HTML, а также получение
практических навыков управления реакцией элементов на страницах HTML и отладки
Javascript-приложений. В тоже время, желающие углубленно изучить предметную область,
могут обратиться к приводимому списку литературы и изучить дополнительные материалы
самостоятельно.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
39
Приложение. Библиотеки jQuery. Dojo
Библиотека jQuery
jQuery – библиотека для упрощения манипулирования объектами. Позволяет существенно
сократить объем кода за счет специальных объектом и методов.
Основная документация доступна по адресу http://docs.jquery.com, а также в книге [2].
Библиотека не претендует на покрытие всех возможных функций, которые могут
потребоваться программисту. В комплекте jQuery содержится лишь минимально
необходимый набор для манипулирования с объектами и обеспечения AJAX-
взаимодействия. Расширения, такие как дополнительные графические управляющие
элементы, могут быть реализованы как плагины.
Основная идея в jQuery заключается в том, что выборка элементов осуществляется с
помощью селекторов, аналогичных CSS с похожим, но расширенным синтаксисом. Отбор
при помощи селектора осуществляется с помощью функций $() или jQuery().
Помимо доступа при помощи селекторов, предоставляется большое количество
сервисных функций.
Пример. Необходимо выделить все четные строки таблицы:
<!DOCTYPE html><html><head> <style> table { background:#f3f7f5; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script></head><body> <table border="1"> <tr><td>Row with Index #0</td></tr> <tr><td>Row with Index #1</td></tr> <tr><td>Row with Index #2</td></tr> <tr><td>Row with Index #3</td></tr> </table> <script>$("tr:odd").css("background-color", "#bbbbff");</script></body></html>
Обратите внимание, что подключается версия jQuery непосредственно с сайта авторов
библиотеки.
Результат представлен на рисунке 7.
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
Отметим, что в данном случае, функция $() получает в качестве аргумента
функциональный литерал, а её назначение – гарантировать, что выполнение этого кода
произойдёт после полной загрузки кода библиотеки jQuery.
Рассмотрим внедрение обработчиков. Для примера возьмем ту же задачу подсветки
параграфов и реакции на нажатие на параграф, которая была рассмотрена с использованием
«чистого» Javascript.
<!DOCTYPE html><html><head> <title>Вывод структуры страницы.</title> <meta charset="utf-8" /> <style> #result {font-style: italic;} div.text p { margin: 0 5px 5px 5px; background-color:yellow} </style> <script src="js/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("div.text p").mouseover(function(){ this.style.backgroundColor = "green"; }).mouseout(function(){ this.style.backgroundColor = "yellow"; }).click(function () { // По идентификатору находим элемент, в который надо поместить результат $("#result").html("<hr/><p>"+Date()+"</p>" + "<" + this.nodeName + ">" + this.textContent + "<p>Вывод завершен!</p><hr/>"); }) }) </script></head><body> <div> <h1>События HTML</h1> <p>Нажмите на текст любого параграфа</p> </div> <div class="text"> <p>1. Параграф внутри интересующего нас div !</p> <p>2. Параграф внутри интересующего нас div !!</p> </div> <div class="text"> <p>3. Параграф внутри интересующего нас div !!!</p> <p>4. Параграф внутри интересующего нас div !!!!</p> </div>
Самарев Р.С. Javascript. Добавление динамического поведения HTML. Средства отладки. Оглавление
42
<!-- Сюда поместим результат --> <div id="result"></div></body></html>
Следует обратить внимание на то, что в этом случае HTML-разметка не содержит
декларации обработчиков. Назначение обработчиков происходит из библиотеки jQuery при
помощи соответствующих свойств DOM-модели, однако доступ к ним осуществляется через
методы самой библиотеки.
Обратите внимание на то, что метод $(document).ready вызывается только после того, как
браузером загружен весь код страницы и всех подключаемых js-файлов. Только после этого
можно безопасно назначить обработчики. В соответствии с принципами jQuery их
назначение производится через селектор $("div.text p").mouseover(function(){…}
Полезная статья об использовании jQuery: http :// habrahabr . ru / post /149349/
Библиотека Dojo
Библиотека предназначена для полноценного программирования клиентских
приложений. Включается в себя как средства манипулирования с объектами, так и средства
для декларативного описания элементов страницы, а также средства для динамического
создания графических управляющих элементов на странице.
Рассмотрим пример назначения обработчиков событий средствами Dojo.
query("#result")[0].innerHTML = "<hr/><p>"+Date()+"</p>" + "<" + this.nodeName + ">" + this.textContent + "<p>Вывод завершен!</p><hr/>"; } }) }) }) </script></head><body> <div> <h1>События HTML</h1> <p>Нажмите на текст любого параграфа</p> </div> <div class="text"> <p>1. Параграф внутри интересующего нас div !</p> <p>2. Параграф внутри интересующего нас div !!</p> </div> <div class="text"> <p>3. Параграф внутри интересующего нас div !!!</p> <p>4. Параграф внутри интересующего нас div !!!!</p> </div>
<!-- Сюда поместим результат --> <div id="result"></div></body></html>
Представленный пример соответствует рассмотренным ранее примерам подсветки и
реакции на щелчок мышью для «чистого» Javascript и jQuery. Также как и в случае jQuery
используется специальное средство dojo/query, гарантирующее загрузку браузером всех
модулей. Также, как и в jQuery используется селектор элементов, однако назначение
обработчиков производится через свойства DOM непосредственно, а не с использованием
новых методов.
В части создания форм в Dojo принципиально то, что поддерживает два стиля
программирования. Декларативный на основании разметки HTML, когда каркас для
отображения уже задан и динамический, когда состав элементов формируется динамически
в процессе выполнения Javascript-кода.
Приведём пример из учебника «Разработка HTML-виджетов с помощью Dojo. Игорь