Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемakoub.narod.ru
1 Работа с DOM-моделью и пользовательский интерфейс По материалам курса University of Washington
2 Введение в DOM DOM – Document Object Model: My title My link My header Элементы ( Element ), один из них - корневой Атрибуты ( Attribute ) Текстовые узлы ( Text )
3 Работа с узлами в DOM Есть несколько способов получить объект, представляющий узел, через глобальный объект document или уже имея ссылку на другой узел: 1.Если узел имеет уникальный идентификатор (атрибут id ), то узел можно найти с помощью метода document.getElementById(id). 2.Можно найти массив элементов с заданными тегами с помощью метода document.getElementsByTagName(tag). 3.Можно перейти от узла к его непосредственным потомкам node.firstChild, node.lastChild или к предку node.parentNode. 4.Можно перейти от узла к его соседям node.nextSibling, node.previousSibling.
4 Пример страницы Заголовок страницы Это заголовок А это - параграф со ссылкой внутри. элемент списка еще один элемент третий элемент списка
5 Дерево элементов для этой страницы html headbody titleh1metap ul a li Некоторые из элементов имеют вложенные атрибуты и/или текст.
6 Полное дерево одного из элементов p a А это параграф со внутри. ссылкой href= " - элемент - атрибут - текстовый элемент firstChild parentNode nextSibling previousSibling lastChild Если pNode – указатель на "p", то заменим "ссылкой" на "звездой". pNode.firstChild.nextSibling. lastChild.nodeValue = "звездой"; change.html
7 Изменение структуры DOM страницы Следующие методы применимы ко всем элементам DOM: 1.element.appendChild(node) – добавление нового узла в конец списка "детей". 2.element.insertBefore(newNode, oldNode) – добавление нового узла в список детей перед заданным. 3.element.removeChild(node) – удаление указанного узла из списка "детей". 4.element.replaceChild(newNode, oldNode) – замена в списке "детей" существующего элемента на новый. Новый элемент (атрибут, текстовый узел) можно создать с помощью следующих методов: 1.document.createElement(tag) – создание нового элемента с заданным тегом. 2.document.createAttribute(name) – создание нового атрибута с заданным именем. 3.document.createTextNode(data) – создание текстового узла.
8 Динамическое добавление узлов insert.html Добавим новый параграф сразу после заданного: function insertNewParagraph() { var pNode = document.getElementById('para'); var newPara = document.createElement('p'); var newText = document.createTextNode( 'А это динамически добавленный параграф!'); newPara.appendChild(newText); pNode.parentNode.insertBefore(newPara, pNode.nextSibling); } body h1p id="para"ul p (newPara) А это...
9 Отделение Javascript-кода от HTML separate.html Поместим теперь весь код полностью в отдельную javascript-страницу: window.onload = initBody; function initBody() { var pNode = document.getElementById('para'); pNode.onclick = insertNewParagraph; } function insertNewParagraph() { var pNode = document.getElementById('para'); var newPara = document.createElement('p'); newPara.style.color = 'red'; newPara.style.marginLeft = '50px'; var newText = document.createTextNode( 'А это динамически добавленный параграф!'); newPara.appendChild(newText); pNode.parentNode.insertBefore(newPara, pNode.nextSibling); }
10 Динамическое добавление реакций на события dyna.html Вместо определения значений атрибута onclick можно добавлять элементам реакции на события. Например, вместо window.onload = initBody; можно написать window.addEventListener('load', initBody, false); Преимущества: 1.Соответствие стандарту (метод addEventListener применим не только для HTML-страниц, но и для любых XML-документов). 2.Можно определить несколько реакций на одно и то же событие, при этом все они будут выполняться последовательно. 3.Можно управлять распространением событий (третий аргумент addEventListener ). Удалить реакцию можно с помощью метода window.removeEventListener с теми же аргументами. В примере реакции динамически добавляются и удаляются.
11 Использование групповой обработки group.html Массовую обработку элементов можно производить с помощью метода getElementsByTagName, например: var emElements = document.getElementsByTagName('em'); for (var i = 0; i < emElements.length; ++i) { emElements[i].style.backgroundColor = 'yellow'; } В примере показано изменение стиля элементов.
12 Элементы интерфейса с пользователем Имеется большой набор элементов интерфейса с пользователем: простое окно ввода; многострочное окно ввода; кнопка; флажок; переключатель; Чаще всего эти элементы используются в составе «форм». Содержимое «формы» может быть передано web-серверу в виде параметров запроса. Все элементы считаются «элементами ввода» различных типов и появляются в виде элементов, но некоторые могут иметь и свои собственные теги, например,.
13 Кнопки Пример использования кнопок. Заголовок страницы Жми сюда! button.html Внутри тела реакции this означает ссылку на сам элемент (кнопку). Заголовок страницы Жми сюда! more-button.html Осторожно! Внутри функции this означает ссылку на контекст!
14 Многострочный текст function changeProperty(butt, prop) { if (typeof(butt.flag) == 'undefined') butt.flag = 1; var ta = document.getElementById('myText'); ta[prop] = butt.flag == 1; butt.flag = 1 - butt.flag; } Это область ввода текста Сюда вводим текст. Disable/Enable ReadOnly yes/no textarea.html
15 Списки выбора Выберите из списка: Пики Трефы Бубны Черви Вы выбрали: &bksp; select.html При выборе элемента происходит событие change, при этом можно узнать, какое значение выбрано и какой текст связан с этим выбором. selectNode.options – массив узлов, представляющих элементы списка selectNode.size – число показываемых элементов selectNode.multiple – разрешен ли мульти-выбор selectNode.selectedIndex – индекс выбранного элемента Еще атрибуты:
16 Списки выбора (продолжение) Репка Дедка Бабка Внучка Жучка Кошка Мышка Список может быть визуально разбит на группы
17 Поля ввода Элемент с тегом input может заменять и дополнять многие из рассмотренных ранее элементов ввода. Его представление и функциональность зависят от типа. Этот элемент никогда не имеет внутреннего содержания, только атрибуты. где «тип элемента ввода» может иметь следующие значения: text password checkbox radio button submit reset file hidden текстовое поле ввода, похожее на textarea текстовое поле ввода со скрытым отображением символов флажок элемент выбора кнопка (такая же, как в элементе button ) Кроме этих типов есть еще типы, предназначенные исключительно для представления элементов ввода внутри форм для передачи информации на web-сервер. Это типы:
18 Поля ввода (продолжение) имеют атрибуты maxLength, size, disabled, readOnly, value. имеют атрибуты defaultChecked, disabled, checked, value. имеет атрибуты disabled, value. Чтобы приделать надписи к флажкам и элементам выбора, используют элемент label: текст. Чтобы собрать элементы выбора в одну группу, используют атрибут name:. Как выглядят все эти элементы ввода можно посмотреть в примере input.html
19 Визуальная группировка элементов UI Это группа элементов ввода Надпись 1 Надпись 2 Надпись 3 Элементы ввода можно визуально сгруппировать и добавить надпись к группе:
20 Формы Введите запрос: Форма – это средство для группировки элементов ввода с целью последующей отправки введенной информации на сервер. Отправка информации производится с помощью запроса типа GET или POST с параметрами. Атрибут action задает URL сервера, на который отправляется запрос. Атрибут method задает используемую команду – GET или POST. В приведенном примере осуществляется запрос GET к поисковой машине Google с параметром q и значением введенного запроса. Нажатие кнопки submit (отправить запрос) эквивалентно в данном случае выдаче запроса где value – содержимое текстового поля ввода. simple-form.html
21 Более сложный пример формы Введите анкетные данные Ваше имя: Запрашиваемая должность: Программист Web-дизайнер Крутой спец Квалификация: Новичок Профи Эксперт Хочу получать от Важный атрибут каждого поля ввода – name. Он задает имя аргумента при запросе к серверу. Пример формы: complex-form.html
22 Методы GET и POST Метод GET отправляет все значения в строке запроса с помощью кодирования типа вся строка видна в окне браузера; ее можно запомнить в «закладках»; легко вернуться назад на эту же страницу; число и размер параметров ограничены длиной URL. Метод POST отправляет все значения в заголовке запроса с помощью задания пар name=value отправляемые значения не так легко доступны; URL запроса бесполезно запоминать: параметров в нем нет; при возврате назад на эту же страницу чаще всего возникает ошибка POSTDATA; практически нет ограничений на число и длину параметров.
23 Специальные кнопки Submit и Reset Запрос отправляется с помощью специального элемента ввода, имеющего вид кнопки: Надпись на кнопке можно специфицировать с помощью атрибута value : Если надпись не специфицирована, то используется системное значение, зависящее от локализации системы (" Submit " для английского языка, " Отправить запрос " для русского). Кнопка Reset используется для восстановления начальных значений элементов ввода в форме: Имитировать действие этих кнопок можно и программным путем. var form =... // DOM-узел для формы form.submit();... form.reset();
24 Использование CSS для элементов ввода Поскольку один и тот же тег input используется для элементов самого разного вида, то задавать стили элементов в виде input { color: blue; font-style: italic; font-size: large; } хотя и допустимо, но часто неудобно. Задавать стили можно отдельно для каждого типа элемента, например: input[type="text"] { color: blue; font-style: italic; font-size: large; }
25 Проверка корректности вводимых данных Корректность введенных данных можно осуществлять перед отсылкой запроса (на клиенте с помощью Javascript); при обработке запроса на сервере (php, сервлеты). Вот как может выглядеть схема программы на Javascript для проверки корректности введенных данных. function onLoad() { var submit = document.getElementById('mySubmitButton'); submit.addEventListener('click', onSubmit, false); } function onSubmit(event) { if (!checkInputValues()) { event.preventDefault(); showErrors(); } В IE вместо event.preventDefault() используется return false;
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.