/* ДЗ 4 - работа с DOM */

/**
 * Функция должна создать элемент с тегом DIV, поместить в него текстовый узел и вернуть получившийся элемент
 *
 * @param {string} text - текст, который необходимо поместить в div
 * @return {Element}
 */
function createDivWithText(text) {
    var div = document.createElement('div');
    div.innerText = text;
    return div;
}

/**
 * Функция должна создать элемент с тегом A, установить значение для атрибута href и вернуть получившийся элемент
 *
 * @param {string} hrefValue - значение для атрибута href
 * @return {Element}
 */
function createAWithHref(hrefValue) {
    var a = document.createElement('a');
    a.href = hrefValue;
    return a;
}

/**
 * Функция должна вставлять элемент what в начало элемента where
 *
 * @param {Element} what - что вставлять
 * @param {Element} where - куда вставлять
 */
function prepend(what, where) {
    where.prepend(what);
}

/**
 * Функция должна перебрать все дочерние элементы элемента where
 * и вернуть массив, состоящий из тех дочерних элементов
 * следующим соседом которых является элемент с тегом P
 * Рекурсия - по желанию
 *
 * @param {Element} where - где искать
 * @return {Array}
 *
 * @example
 * для html '

' * функция должна вернуть: [div, span] * т.к. следующим соседом этих элементов является элемент с тегом P */ function findAllPSiblings(where) { var w = where.children; var arr = []; for (var i = 0; i < w.length - 1; i++) { if (w[i].nextElementSibling.nodeName === 'P') { arr.push(w[i]); } } return arr; } /** * Функция должна перебрать все дочерние узлы типа "элемент" внутри where * и вернуть массив, состоящий из текстового содержимого перебираемых элементов * Но похоже, что в код закралась ошибка, которую нужно найти и исправить * * @param {Element} where - где искать * @return {Array} */ function findError(where) { var result = []; for (var i = 0; i < where.childNodes.length; i++) { if (where.childNodes[i].nodeType === 1) { result.push(where.childNodes[i].innerText); } } return result; } /** * Функция должна перебрать все дочерние узлы элемента where * и удалить из него все текстовые узлы * Без рекурсии! * Будьте внимательны при удалении узлов, * можно получить неожиданное поведение при переборе узлов * * @param {Element} where - где искать * * @example * после выполнения функции, дерево
привет

loftchool!!! * должно быть преобразовано в

*/ function deleteTextNodes(where) { var w = where.childNodes; for (var i = 0; i < w.length; i++) { if (w[i].nodeType === 3) { w[i].parentNode.removeChild(w[i]); } } } /** * Выполнить предудыщее задание с использование рекурсии * то есть необходимо заходить внутрь каждого дочернего элемента * * @param {Element} where - где искать * * @example * после выполнения функции, дерево
привет

loftchool

!!!
* должно быть преобразовано в

*/ function deleteTextNodesRecursive(where) { for (let i = 0; i < where.childNodes.length; i++) { let child = where.childNodes[i]; if (child.nodeType === 3) { where.removeChild(child); //удаляем ребенка i--; // уменьшаем счетчик т.к. все сместилось } else if (child.nodeType === 1) { deleteTextNodesRecursive(child); // вызываем рекурсию } } } export { createDivWithText, createAWithHref, prepend, findAllPSiblings, findError, deleteTextNodes, deleteTextNodesRecursive };