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-- &amp;&amp; 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 &amp;&amp; n !== 0) { // Если e не определен, просто вернуть его</b>

<b>    if (n &gt; 0) { // Отыскать следующий братский элемент</b>

<b>      if (е.nextElementSibling) е = е.nextElementSibling;</b>

<b>      else {</b>

<b>        for(e=e.nextSibling; e &amp;&amp; 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&amp;&amp;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 &lt; 0) n += e.children.length; // Преобразовать отрицательное</b>

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

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

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

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

<b>  }</b>

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

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

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

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

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