JavaScript. Подробное руководство, 6-е издание, стр. 205
<b>nextElementSibling, previousElementSibling</b>Похожи на свойства
<b>nextSibling</b><b>previousSibling</b><b>childElementCount</b>Количество дочерних элементов. Возвращает то же значение, что и свойство
<b>children.length</b>Эти свойства доступа к дочерним и братским элементам стандартизованы и реализованы во всех текущих броузерах, кроме IE. [37]
Поскольку прикладной интерфейс навигации по элементам документа реализован не во всех броузерах, вам может потребоваться определить переносимые функции навигации, как в примере 15.2.
Пример 15.2. Переносимые функции навигации по документу
<b>/**</b><b>* Возвращает ссылку на n-го предка элемента е или null, если нет такого предка</b><b>* или если этот предок не является элементом Element</b><b>* (например, Document или DocumentFragment).</b><b>* Если в аргументе n передать 0, функция вернет сам элемент е.</b><b>* Если в аргументе n передать 1 (или вообще опустить этот аргумент),</b><b>* функция вернет родительский элемент.</b><b>* Если в аргументе n передать 2, функция вернет родителя родительского элемента и т. д. */</b><b>function parent(e, n) {</b><b> if (n === undefined) n = 1;</b><b> while(n-- && e) e = e.parentNode;</b><b> if (!e || e.nodeType !== 1) return null;</b><b> return e;</b><b>}</b><b>/**</b><b>* Возвращает n-й братский элемент элемента е.</b><b>* Если в аргументе п передать положительное число, функция вернет следующий</b><b>* n-й братский элемент.</b><b>* Если в аргументе п передать отрицательное число, функция вернет предыдущий</b><b>* n-й братский элемент.</b><b>* Если в аргументе п передать ноль, функция вернет сам элемент е.</b><b>*/</b><b>function sibling(e.n) {</b><b> while(e && n !== 0) { // Если e не определен, просто вернуть его</b><b> if (n > 0) { // Отыскать следующий братский элемент</b><b> if (е.nextElementSibling) е = е.nextElementSibling;</b><b> else {</b><b> for(e=e.nextSibling; e && e.nodeType !== 1; e=e.nextSibling)</b><b> /* пустой цикл */ ;</b><b> }</b><b> n--;</b><b> }</b><b> else { // Отыскать предыдущий братский элемент</b><b> if (e.previousElementSibing) e = e.previousElementSibling;</b><b> else {</b><b> for(e=e.previousSibling;e&&e.nodeType!==1;e=e.previousSibling)</b><b> /* пустой цикл */ ;</b><b> }</b><b> n++;</b><b> }</b><b> }</b><b> return e;</b><b>}</b><b>/**</b><b>* Возвращает n-й дочерний элемент элемента е или null, если нет такого</b><b>* дочернего элемента.</b><b>* Если в аргументе n передать отрицательное число, поиск дочернего элемента</b><b>* будет выполняться с конца. 0 соответствует первому дочернему элементу,</b><b>* но -1 - последнему, -2 - второму с конца и т. д.</b><b>*/</b><b>function child(e, n) {</b><b> if (e.children) { // Если массив children существует</b><b> if (n < 0) n += e.children.length; // Преобразовать отрицательное</b><b> // число в индекс массива</b><b> if (п < 0) return null; // Если получилось отрицательное число,</b><b> // значит, нет такого дочернего элемента </b><b> return е.children[n3; // Вернуть заданный дочерний элемент</b><b> }</b><b> // Если элемент е не имеет массива children, начать поиск с первого</b><b> // дочернего элемента, двигаясь вперед, или начать поиск с последнего</b><b> // дочернего элемента, двигаясь назад.</b><b> if (n >= 0) { // n - положительное: двигаться вперед, начиная с первого</b><b> // Найти первый дочерний элемент элемента е</b>