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

<b>    else parent.insertBefore(child, parent.childNodes[n]);</b>

<b>}</b>

Если метод

<b>appendChild()</b>
или
<b>insertBefore()</b>
используется для вставки узла, который уже находится в составе документа, этот узел автоматически будет удален из текущей позиции и вставлен в новую позицию; нет необходимости явно удалять узел. Пример 15.4 демонстрирует функцию сортировки строк таблицы по значениям ячеек в указанном столбце. Она не создает новые узлы и для изменения порядка следования существующих узлов использует метод
<b>appendChild().</b>

Пример 15.4. Сортировка строк таблицы

<b>// Сортирует строки в первом элементе &lt;tbody&gt; указанной таблицы по значениям </b>

<b>// n-й ячейки в каждой строке. Использует функцию сравнения, если она указана.</b>

<b>// Иначе сортировка выполняется в алфавитном порядке, </b>

<b>function sort rows(table, n, comparator) {</b>

<b>  var tbody = table.tBodies[0]; // Первый &lt;tbody&gt;; возможно созданный неявно </b>

<b>  var rows = tbody.getElementsByTagName(&quot;tr&quot;); // Все строки в tbody </b>

<b>  rows = Array.prototype.slice.call(rows,0); // Скопировать в массив</b>

<b>  // Отсортировать строки по содержимому n-го элемента &lt;td&gt; </b>

<b>  rows.sort(function(row1,row2) {</b>

<b>    var cell1 = row1.getElementsByTagName(&quot;td&quot;)[n]; // n-e ячейки </b>

<b>    var cell2 = row2.getElementsByTagName(&quot;td&quot;)[n]; // двух строк </b>

<b>    var vail = celH.textContent || celH.innerText; // текстовое содерж. </b>

<b>    var val2 = cell2.textContent || cell2.innerText; // двух ячеек </b>

<b>    if (comparator) return comparator(val1, val2); // Сравнить! </b>

<b>      if (vail &lt; val2) return -1; </b>

<b>      else if (vail &gt; val2) return 1; </b>

<b>    else return 0;</b>

<b>  });</b>

<b>  // Добавить строки в конец tbody в отсортированном порядке.</b>

<b>  // При этом строки автоматически будут удалены из их текущих позиций,</b>

<b>  // благодаря чему отпадает необходимость явно удалять их. Если &lt;tbody&gt; содержит </b>

<b>  // какие-либо другие узлы, отличные от элементов &lt;tr&gt;, эти узлы &quot;всплывут&quot; наверх. </b>

<b>  for(var і = 0; і &lt; rows.length; i++) tbody.appendChild(rows[i]);</b>

<b>}</b>

<b>// Отыскивает в таблице элементы &lt;th&gt; (предполагается, что в таблице существует </b>

<b>// только одна строка с ними) и добавляет в них возможность обработки щелчка мышью,</b>

<b>// чтобы щелчок на заголовке столбца вызывал сортировку таблицы по этому столбцу.</b>

<b>function makeSortable(table) {</b>

<b>  var headers = table.getElementsByTagName(&quot;th&quot;); </b>

<b>  for(var і = 0; і &lt; headers.length; i++) {</b>

<b>    (function(n) { // Чтобы создать локальную область видимости </b>

<b>      headers[i].onclick = function() { sortrows(table, n); };</b>

<b>      }(i)); // Присвоить значение і локальной переменной n</b>

<b>  }</b>

<b>}</b>

15.6.3. Удаление и замена узлов

Метод

<b>removeChild()</b>
удаляет элемент из дерева документа. Но будьте внимательны: этот метод вызывается не относительно узла, который должен быть удален, а (как следует из фрагмента «child» в его имени) относительно родителя удаляемого узла. Этот метод вызывается относительно родителя и принимает в виде аргумента дочерний узел, который требуется удалить. Чтобы удалить узел n из документа, вызов метода должен осуществляться так:

<b>n.parentNode.removeChild(n);</b>

Метод

<b>replaceChild()</b>
удаляет один дочерний узел и замещает его другим. Этот метод должен вызываться относительно родительского узла. В первом аргументе он принимает новый узел, а во втором - замещаемый узел. Например, ниже показано, как заменить узел n текстовой строкой:

<b>n.parentNode.replaceChild(document.createTextNode(&quot;[ ИСПРАВЛЕНО ]&quot;). n);</b>

Следующая функция демонстрирует еще один способ применения метода

<b>replaceChild():</b>

<b>// Замещает узел n новым элементом &lt;b&gt; и делает узел п его дочерним элементом, </b>

<b>function embolden(n) {</b>

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

<b>  // атрибута id элемента</b>

<b>  if (typeof n == &quot;string&quot;) n = document.getElementByld(n);</b>

<b>  var parent = n.parentNode; // Ссылка на родителя элемента n</b>

<b>  var b = document.сreateElement(&quot;b&quot;); // Создать элемент &lt;b&gt;</b>

<b>  parent.replaceChild(b, n); // Заменить n элементом &lt;b&gt;</b>