русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Удобные методы создания узлов


Дата добавления: 2015-07-09; просмотров: 486; Нарушение авторских прав


 

При изучении примера 15.9 вы могли заметить, что для создания содержимого документов приходится вызывать большое число методов: прежде всего, необхо_ димо создать объект Element, затем установить его атрибуты, а потом создать узел Text и добавить его в объект Element. После этого Element добавляется в роди_ тельский объект Element и т. д. Чтобы просто создать элемент <table>, установить один атрибут и добавить строку заголовка, в примере 15.9 потребовалось напи_ сать 13 строк программного кода. В примере 15.10 приводится определение предназначенной для создания объекта Element вспомогательной функции, кото_ рая существенно упрощает выполнение повторяющихся операций при DOM_ программировании.

 

Пример 15.10 определяет единственную функцию с именем make(). Эта функция создает объект Element с заданным именем тега, устанавливает его атрибуты и до_ бавляет к нему дочерний узел. Атрибуты определяются как свойства объекта, а дочерний узел передается как массив. Элементами массива могут быть строки, которые преобразуются в текстовые узлы, или другие объекты типа Element, обычно создаваемые с помощью вложенных вызовов функции make().

 

Функция make() обладает очень гибким синтаксисом и допускает два сокращен_ ных варианта вызова. Первый – когда не задается ни одного атрибута; в этом случае аргумент с атрибутами может быть опущен и вместо него передается ар_ гумент с дочерним узлом. Второй – когда существует единственный дочерний узел, который можно передать функции непосредственно, не помещая в массив. Единственное ограничение – эти два способа сокращенной записи вызова не мо_ гут использоваться вместе, если единственный дочерний узел не является тек_ стовым узлом, передаваемым в виде строки.

 

Благодаря функции make() целых 13 строк программного кода, которые в при_ мере 15.9 создают элемент <table>, могут быть сокращены следующим образом:



 

var table = make("table", {border:1}, make("tr", [make("th", "Имя"), make("th", "Тип"), make("th", "Значение")]));

 

Но и этот фрагмент можно записать еще короче. В примере 15.10 вслед за функ_ цией make() определяется еще одна вспомогательная функция с именем maker(). Она принимает имя тега и возвращает вложенную функцию, которая вызывает функцию make() с именем заданного тега. Если потребуется создать большое чис_ ло таблиц, можно будет определить функции для создания таблиц следующим образом:

 

var table = maker("table"), tr = maker("tr"), th = maker("th");

 

После этого программный код создания таблицы с заголовком уместится в един_ ственной строке:


 

var mytable = table({border:1}, tr([th("Имя"), th("Тип"), th("Значение")]));


 

350 Глава 15. Работа с документами

Пример 15.10. Вспомогательные функции создания элементов

/**

* make(tagname, attributes, children):

* создает HTML_элемент с заданным именем тега tagname, атрибутами

* и дочерними элементами.

 

*

* Аргумент attributes – это JavaScript_объект: имена и значения его свойств _ это имена

* и значения атрибутов. Если атрибуты отсутствуют, а аргумент children

* представляет собой массив или строку, тогда аргумент attributes

* можно просто опустить, а значение аргумента children передавать во втором аргументе.

 

*

* Как правило, аргумент children представляет собой массив дочерних

* элементов, добавляемых к создаваемому элементу. Если элемент не имеет

* потомков, аргумент children может быть опущен.

* Если дочерний элемент единственный, его можно передавать непосредственно,

* не заключая его в массив. (Но если дочерний элемент не является строкой

* и атрибуты отсутствуют, тогда массив должен использоваться обязательно.)

*

* Пример: make("p", ["Это ", make("b", "жирный"), " шрифт."]);

 

*

* Идея взята из библиотеки MochiKit (http://mochikit.com),

* автор библиотеки – Боб Ипполито (Bob Ippolito)

*/

function make(tagname, attributes, children) {

 

// Если было передано два аргумента и аргумент attributes представляет

 

// собой массив или строку, значит, на самом деле это аргумент children. if (arguments.length == 2 &&

 

(attributes instanceof Array || typeof attributes == "string")) { children = attributes;

 

attributes = null;

}

 

// Создать элемент

var e = document.createElement(tagname);

 

// Установить атрибуты if (attributes) {

for(var name in attributes) e.setAttribute(name, attributes[name]);

}

 

// Добавить дочерний узел, если таковой был определен.

if (children != null) {    
if (children instanceof Array) { // Если это массив  
for(var i = 0; i < children.length; i++) { // обойти все элементы  
var child = children[i];    
if (typeof child == "string") // Текстовый узел  
  child = document.createTextNode(child);  
e.appendChild(child); // Все остальное – это Node  
}      
  }      
  else if (typeof children == "string") // Единственный узел_потомок Text
  e.appendChild(document.createTextNode(children));  
  else e.appendChild(children); // Единственный узел_потомок другого типа
               

}


 

15.9. Пример: динамическое создание оглавления
   

 

// Вернуть элемент return e;

}

 

/**

* maker(tagname): Возвращает функцию, которая вызывает make() для заданного тега.

 

* Пример: var table = maker("table"), tr = maker("tr"), td = maker("td");

*/

function maker(tag) {

return function(attrs, kids) {

 

if (arguments.length == 1) return make(tag, attrs); else return make(tag, attrs, kids);

}

}

 



<== предыдущая лекция | следующая лекция ==>
Добавление содержимого в документ | Свойство innerHTML


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.878 сек.