Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

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

* Если в аргументе n передать отрицательное число, поиск дочернего элемента

* будет выполняться с конца. 0 соответствует первому дочернему элементу,

* но -1 - последнему, -2 - второму с конца и т. д.

*/

function child(e, n) {

if (e.children) { // Если массив children существует

if (n < 0) n += e.children.length; // Преобразовать отрицательное

// число в индекс массива

if (п < 0) return null; // Если получилось отрицательное число,

// значит, нет такого дочернего элемента

return е.children[n3; // Вернуть заданный дочерний элемент

}

// Если элемент е не имеет массива children, начать поиск с первого

// дочернего элемента, двигаясь вперед, или начать поиск с последнего

// дочернего элемента, двигаясь назад.

if (n >= 0) { // n - положительное: двигаться вперед, начиная с первого

// Найти первый дочерний элемент элемента е

if (е.firstElementChild) е = е.firstElementChild;

else {

for(e = е.firstChild; е && e.nodeType !== 1; е = е.nextSibling)

/* пустой цикл */;

}

return sibling(e, n); // Вернуть n-го брата первого дочернего элемента

}

else { // n - отрицательное: двигаться назад, начиная с последнего

if (е.lastElementChild) е = е.lastElementChild;

else {

for(e = e.lastChild; e && e.nodeType !== 1; e=e.previousSibling)

/* пустой цикл */;

}

return sibling(e, n+1); // +1, чтобы преобразовать номер -1 дочернего

// в номер 0 братского для последнего

}

}

Определение собственных методов элементов

Все текущие броузеры (включая ІE8 и выше) реализуют модель DOM таким образом, что такие типы, как

Element
и
HTMLDocument
[38] , являются классами, такими же как классы
String
и
Array
. Они не имеют конструкторов (как создавать новые объекты
Element
, будет показано далее в этой главе), но они имеют объекты-прототипы, которые вы можете расширять своими методами:

38

IE поддерживает возможность расширения прототипов объектов Element, HTMLDocument и Text, но не поддерживает для объектов Node, Document, HTMLElement и всех подтипов типа HTMLElement

Element.prototype.next = function {

if (this.nextElementSibling) return this.nextElementSibling;

var sib = this.nextSibling;

while(sib && sib.nodeType !== 1) sib = sib.nextSibling;

return sib;

};

Функции, представленные в примере 15.2, не были реализованы в виде методов объекта

Element
лишь по той причине, что такая возможность не поддерживается в ІE7.

Однако возможность расширения типов DOM может пригодиться для реализации особенностей, характерных для IE, в других броузерах. Как отмечалось выше, нестандартное свойство

children
объекта
Element
было впервые реализовано в IE и только потом - в других броузерах. Используя следующий программный код, можно реализовать это свойство в броузерах, не поддерживающих его, таких как Firefox 3.0:

// Реализация свойства Element.children в броузерах,

// не поддерживающих его

// Обратите внимание, что этот метод возвращает статический

// массив, а не "живой" NodeList

if (!document.documentElement.children) {

Element.prototype.__defineGetter__("children",

function { var kids = [];

for(var c = this.firstChild; c != null; c = c.nextSibling)

if (c.nodeType === 1) kids.push(c);

return kids;

}):

}

Метод

__defineGetter__
(о нем рассказывается в разделе 6.7.1) не является

стандартным, но его вполне можно использовать для обеспечения переносимости в таком программном коде, как этот.

15.4. Атрибуты

Поделиться:
Популярные книги

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали

Конец детства (сборник)

Кларк Артур Чарльз
Фантастика:
научная фантастика
7.00
рейтинг книги
Конец детства (сборник)

На границе империй. Том 7. Часть 3

INDIGO
9. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.40
рейтинг книги
На границе империй. Том 7. Часть 3

Казань

Вязовский Алексей
2. Русский бунт
Фантастика:
альтернативная история
4.50
рейтинг книги
Казань

Практик

Листратов Валерий
5. Ушедший Род
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Практик

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Последний Паладин. Том 9

Саваровский Роман
9. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 9

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль