Учимся делать изменение DOM создание, замена и удаление узлов с помощью JS
Добавление и удаление узлов
Помимо редактирования существующих элементов, DOM-интерфейс позволяет удалять или создавать новые элементы на странице. Это открывает широкие возможности при создании красивых динамических страниц. Ниже приведены методы для работы с документом в этом направлении.
appendChild() | Добавляет новый дочерний узел, к элементу, в качестве последнего дочернего узла |
cloneNode() | Клонирует элемент |
createComment() | Создает комментарий с указанным текстом |
createDocumentFragment() | Создает пустой узел DocumentFragment |
createElement() | Создает узел Element |
createTextNode() | Создает текстовый узел |
insertAdjacentHTML() | позволяет вставлять произвольный HTML в любое место документа, в том числе и между узлами! |
insertBefore() | Вставляет новый дочерний узел перед указанным, существующим, дочерним узлом |
remove() | Удаляет элемент |
removeChild() | Удаляет дочерний узел из элемента |
replaceChild() | Заменяет дочерний узел в элементе |
write() | Записывает HTML выражения или код JavaScript в документ |
writeln() | То же, что write() , но добавляет символ новой строки после каждого оператора |
appendChild()
Метод appendChild вставляет новый узел в конец родительского элемента. Вставляемый узел становится последним в списке дочерних узлов элемента.
Синтаксис
Параметры
Примеры
cloneNode()
Метод cloneNode создает копию узла, и возвращает клон.
Синтаксис
Параметры
Комментарии
Использование cloneNode может привести к появлению в документе элементов с одинаковым уникальным идентификатором id или именем name .
Если исходный элемент имеет атрибут id или name , тогда перед вставкой в документ необходимо изменить эти атрибуты у элемента-клона.
Примеры
createComment()
Метод createComment создает комментарий-узел с указанным текстом.
Синтаксис
Параметры
Примеры
createDocumentFragment()
Метод createDocumentFragment создает воображаемый объект Node , со всеми свойствами и методами объекта Node
Это особенный кросс-браузерный DOM-объект, который похож на обычный DOM-узел, но им не является.
Синтаксис
Описание, комментарии
У DocumentFragment нет обычных свойств DOM-узлов, таких как innerHTML , tagName и т.п. Это не узел.
Его «Фишка» заключается в том, что когда DocumentFragment вставляется в DOM – то он исчезает, а вместо него вставляются его дети. Это свойство является уникальной особенностью DocumentFragment.
Например, если добавить в него много LI , и потом вызвать ul.appendChild(fragment) , то фрагмент растворится, и в DOM вставятся именно LI , причём в том же порядке, в котором были во фрагменте.
Примеры
createElement()
Метод createElement создаёт новый узел «элемент» с указанным тегом.
Синтаксис
Параметры
Комментарии
После создания «элемента» с указанным тегом его необходимо добавить на страницу.
Примеры
-элемент и добавить его в
createTextNode()
Метод createTextNode создает текстовый узел с указанным текстом.
Синтаксис
Параметры
Примеры
insertAdjacentHTML()
Метод insertAdjacentHTML разбирает указанный текст как HTML или XML и вставляет полученные узлы (nodes) в DOM дерево в указанную позицию.
Синтаксис
Параметры
Для одинарного тега используются только beforebegin и afterend.
Комментарии
Данный метод не перезагружает имеющееся содержимое элемента, поэтому работает намного быстрее, чем использование свойства innerHTML .
Примеры
insertBefore()
Метод insertBefore вставляет новый дочерний узел перед указанным.
Синтаксис
Параметры
Комментарии
Данный метод более универсальный. Он позволяет вставить элемент в любое место среди других дочерних элементов, а не только в конец родителя.
Метода insertAfter не существует, но можно воспользоваться функцией insertAfter(element, refElement) , которая добавит element после узла refElement :
Примеры
remove()
Метод remove удаляет узел из дерева DOM.
Синтаксис
Комментарии
То, что элемент удален из DOM, еще не значит, что он удален совсем!
Он остался объектом и исчезнет только тогда, когда исчезнут все ссылки на него.
Совместимость с браузерами
23,0 | Нет | 23,0 | 7,0 | 10,0 |
Примеры
removeChild()
Метод removeChild удаляет дочерний узел из элемента.
Синтаксис
Параметры
Комментарии
Из названия видно, что данный метод удаляет дочерний узел. То есть метод removeChild необходимо вызывать на том элементе, который является родительским для удаляемого узла.
Метод removeChild возвращает ссылку на удалённый объект. С этим узлом впоследствии можно работать.
Примеры
Используем функцию removeChildren для удаления всех потомков:
replaceChild()
Метод replaceChild заменяет дочерний узел в элементе.
Метод совмещает в себе сразу два действия: удаляет один узел и вставляет на его место новый.
Синтаксис
Параметры
Возвращаемое значение
Метод возвращает ссылку на удалённый узел.
Примеры
write()
Метод write позволяет вывести на страницу переданный в него текст.
Синтаксис
Параметры
Комментарии
Метод write работает только пока HTML-страница находится в процессе загрузки. Он дописывает текст в текущее место HTML ещё до того, как браузер построит из него DOM.
Примеры
writeln()
Метод writeln позволяет вывести на страницу переданный в него текст.
После выведенного текста будет вставлен символ перевода строки.
Синтаксис
Параметры
Комментарии
Метод writeln работает только пока HTML-страница находится в процессе загрузки. Он дописывает текст в текущее место HTML ещё до того, как браузер построит из него DOM.
Примеры
Сравним действия метода writeln с действием метода write:
Поменять DOM с помощью JavaScript [закрыт]
Не могу, поменять DOM с помошью «getElementById» и «innerHTML». Можете помочь как правильно сделать.
Закрыт по причине того, что непонятна суть вопроса участниками Grundy, Igor, 0xdb, L.F.C., Air 11 мар в 5:10 .
Постарайтесь писать более развёрнутые вопросы. Для получения ответа поясните, в чём именно вы видите проблему, как её воспроизвести, что вы хотите получить в результате и т. д. Приведите пример, наглядно демонстрирующий проблему. Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.
DOM — Работа с элементами (узлами)
В этой главе вы узнаете, как добавлять и удалять узлы HTML DOM (HTML элементы).
Создание новых HTML элементов (узлов)
Чтобы добавить новый элемент в дерево HTML DOM, сначала нужно его создать, а затем присоединить его к существующему элементу.
Пример:
Объяснение примера
Сначала создается новый элемент (узел элемента)
Чтобы добавить текст в элемент
, сначала нужно создать текстовый узел. Что мы и делаем:
Затем необходимо присоединить текстовый узел к элементу
И, наконец, нужно присоединить новый элемент к существующему.
Мы находим требуемый существующий элемент:
И присоединяем к нему наш новый элемент:
Создание новых HTML элементов — insertBefore()
Метод appendChild() в предыдущем примере присоединяет новый элемент, как последний потомок.
Если вам нужен противоположный результат, то вы можете воспользоваться методом insertBefore():
Удаление существующих HTML элементов
Чтобы удалить HTML элемент, вы должны знать его родительский элемент:
Внимание! В спецификации DOM 4 реализован метод node.remove(). Однако из-за слабой поддержки браузерами, вам не следует его использовать.
Объяснение примера
Этот HTML документ содержит элемент
Найдем элемент с :
Удалим потомка у родителя:
Конечно, было бы здорово иметь возможность просто удалить элемент, не ссылаясь на его родителя. Но, к сожалению, DOM так устроена, что ей нужно знать как сам элемент, который нужно удалить, так и его родителя.
Таким образом, имеем такую последовательность действий: находим элемент, который нужно удалить, и используем его свойство parentNode, чтобы определить его родителя:
Замена HTML элементы
Чтобы заменить какой-либо элемент в HTML DOM, используется метод replaceChild():
Создание, добавление и удаление элементов HTML страницы
Создание, добавление и удаление элементов HTML страницы
Здравствуйте! С помощью JavaScript можно не только находить элементы на странице (о том как это делать читайте здесь) но также создавать элементы динамически и добавлять их в DOM. О том как это делать и пойдет разговор в этом уроке.
Для того чтобы создать новый элемент на веб-странице — в объекте document есть следующие методы:
- createElement(elementName): создает новый элемент в качестве параметра надо передать любой тег html-страницы, возвращает html-элемент
- createTextNode(text): создает текстовый узел и возвращает его же.
Добавление элемента
Рассмотрим небольшой пример:
Как видно из примера переменная elem будет хранить ссылку на новый элемент div. Однако как вы понимаете создания элементов недостаточно, их ведь еще надо добавить на веб-страницу. Ведь когда мы таким образом создаем элементы они как бы находятся в иаком виртуальном пространстве или в памяти ну а для того чтобы их отобразить на веб-странице существуют специальные методы.
Для добавления элементов на веб-страницу используются следующие методы:
- appendChild(newNode): добавляет новый элемент в конец того элемента у которого был вызван этот метод
- insertBefore(newNode, referenceNode): добавляет новый узел перед узлом который указан в качестве второго параметра.
Давайте рассмотрим пример присоединения элемента на веб-страницу, используя метод метод appendChild:
В пример был создан обычный элемент заголовка h3 и текстовый узел. Затем текстовый узел добавлен в элемент заголовка. После чего заголовок добавлен в один из элементов веб-страницы, чтобы его можно было увидеть на странице.
Но совсем необязательно для создания текста внутри элемента иметь дополнительный текстовый узел, для этого есть свойство textContent, которое позволяет напрямую присвоить текст элементу.
В таком случае текст будет создан неявно при непосредственной установке текста.
И давайте также рассмотрим, как этот элемент добавить в начало коллекции дочерних узлов блока div:
Если вдруг надо добавить новый узел на второе, третье или любое иное место, то надо найти узел, перед которым надо его собственно вставлять, с помощью следующих свойств firstChild/lastChild или nextSibling/previousSibling.
Копирование элемента
Бывают такие ситуации когда элементы довольно сложны по составу, и проще их скопировать. Для этого используется отдельный метод cloneNode().
В метод cloneNode() в качестве параметра надо передать логическое значение: если передать true, то элемент будет скопирован вместе со всеми дочерними узлами; если передать false — то он будет скопирован без дочерних узлов. В данном примере мы копируем элемент вместе с его содержимым и добавляем в конец веб-страницы.
Удаление элемента
Для того чтобы удалить элемент надо вызвать метод removeChild(). Этот метод удалит один из дочерних узлов:
В данном примере удалится первый параграф из блока div
Замена элемента
Для замены одного элемента другим служит метод replaceChild(newNode, oldNode). Этот метод в качестве 1-го параметра принимает новый элемент, который заменяет старый элемент передаваемый в качестве 2-го параметра.
В данном примере заменяем первый параграф, только что созданным заголовком h2.
ИТОГИ.
Для того чтобы создать элемент используются методы:
document.createElement(tag) — создает новый элемент.
document.createTextNode(text) — создает текстовый узел
Методы для вставки и удаления узлов
- parent.appendChild(el) — добавляет элемент в конец существующего элемента
- parent.insertBefore(el, nextSibling)— вставляет элемент перед существующим элементом
- parent.removeChild(el) — удаляет элемент
- parent.replaceChild(newElem, el) — заменяет один элемент на другой
- parent.cloneNode(bool) — копирует элемент, если параметр bool=true то элемент копируется со всеми дочерними элементами, а если false то без дочерних элементов
Задания
Функция вставки элементов
Напишите функцию insertAfter(newEl,oldEl) которая вставляет один элемент после другого в саму функцию в качестве параметров передаются сами элементы.
Удаление всех потомков элемента
Напишите функцию removeChilds(el) которая удаляет все дочерние элементы у выбранного элемента.
Создание списка
Напишите код, который создает список и пункты списка пользователь вводит сам через функцию prompt.
Создание списка из объекта
Напишите функцию которая бы из объекта создавала список. Например пусть дан такой объект:
В результате надо получить список
Рыбы
Карась
Щука
Деревья
Хвойные
Дуб
Ель
Цветковые
Осина
Тополь
Посмотрите видео про добавление и удаление элементов в DOM
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как поменять местами дочерние узлы DOM в JavaScript?
какой самый простой способ поменять порядок дочерних узлов?
например, я хочу, чтобы childNode[3] был childNode[4] и наоборот.
6 ответов
нет необходимости в клонировании. Вы можете просто переместить один узел перед другим с помощью этого:
вы получаете родителя узла. Затем вы вызываете метод insertBefore на родителе, передаете ему узел childNode[4] и говорите, что хотите вставить его перед childNode[3]. Это даст вам результат замены их заказа, поэтому 4 будет до 3, когда это будет сделано.
любой узел, который вставляется в DOM, который уже находится в DOM, сначала удаляется автоматически, а затем вставляется обратно, поэтому нет необходимости сначала вручную удалять его.
ответ jfriend00 на самом деле не меняет элементы (он «меняет» только элементы, которые находятся рядом друг с другом и только под тем же родительским узлом). Это нормально, так как это был вопрос.
этот пример меняет местами элементы путем клонирования, но независимо от их положения и уровня DOM:
Edit: добавлен возврат новой ссылки (если вы хотите сохранить ссылку, e. г. для доступа к атрибуту «parentNode» (в противном случае он теряется)). Пример: Е1 = exchangeElements (e1, e2);
использовать .before или .after !
для более долговечности замены, попробуйте:
это должно работать, даже если родители не соответствуют
для реальной замены любых узлов без cloneNode:
С функцией SwapNode (с использованием PrototypeJS):
попробуйте этот метод:
- Get the parent element
- сохранить two elements you want to swap
сохранить .nextSibling of the node that is last in order например: [1,2,3,4] = > мы хотим поменять 3 & 2, а затем сохранить nextSibling 3, ‘4’.
Мне нужна функция для замены двух произвольных узлов, удерживающих заменяемые элементы в одном месте в dom. Например, если a был в положении 2 относительно своего родителя и b был в положении 0 относительно его родителя, b следует заменить позицию 2 aбывший родитель и a должен заменить дочерний 0 из bбывшим родителем.
Это мое решение, которое позволяет поменять в совершенно разные части dom. Обратите внимание, что своп не может быть простым трехшаговым свопом. Каждый из двух элементов должен быть сначала удален из dom, потому что у них могут быть братья и сестры, которые нуждаются в обновлении и т. д.
решение: я поставил два держателя div, чтобы удерживать место каждого узла, чтобы сохранить относительный порядок братьев. Затем я снова вставляю каждый из узлов в заполнитель другого, сохраняя относительное положение, которое было у заменяемого узла перед заменой. (Мое решение как у бака).
Как работает JS: отслеживание изменений в DOM с помощью MutationObserver
Сегодня, в переводе десятого материала из серии, посвящённой особенностям работы механизмов JavaScript, мы расскажем о том, как отслеживать изменения в DOM с помощью API MutationObserver.
Клиентские части веб-приложений становятся всё сложнее, требуют всё больше системных ресурсов. Происходит это по разным причинам, в частности из-за того, что таким приложениям нужны продвинутые интерфейсы, благодаря которым раскрываются их возможности, и из-за того, что им приходится выполнять сложные вычисления на стороне клиента.
Всё это ведёт к усложнению задачи контроля состояния интерфейсов приложений в процессе их жизненного цикла. Эта задача становится ещё масштабнее в том случае, если речь идёт о разработке чего-то вроде фреймворка или даже обычной библиотеки, когда, например, нужно реагировать на то, что происходит со страницей и выполнять какие-то действия, зависящие от DOM.
Обзор
MutationObserver — это Web API, предоставляемое современными браузерами и предназначенное для обнаружения изменений в DOM. С помощью этого API можно наблюдать за добавлением или удалением узлов DOM, за изменением атрибутов элементов, или, например, за изменением текстов текстовых узлов. Зачем это нужно?
Есть немало ситуаций, в которых API MutationObserver может оказаться очень кстати. Например:
- Вам нужно уведомить пользователя веб-приложения о том, что на странице, с которой он работает, произошли какие-то изменения.
- Вы работаете над новым интересным JS-фреймворком, который динамически загружает JavaScript-модули, основываясь на изменениях DOM.
- Возможно, вы работаете над WYSIWYG-редактором и пытаетесь реализовать функционал отмены и повтора действий. Воспользовавшись API MutationObserver , вы будете, в любой момент, знать о том, какие изменения произошли на странице, а это означает, что вы легко сможете их отменять.
Текстовый редактор, работающий в браузере
Выше приведены лишь несколько ситуаций, в которых возможности MutationObserver могут оказаться полезными. На самом деле их гораздо больше.
Как пользоваться MutationObserver
Использовать MutationObserver в веб-приложениях довольно просто. Нужно создать экземпляр MutationObserver , передав соответствующему конструктору функцию, которая будет вызываться каждый раз, когда в DOM будут происходить изменения. Первый аргумент функции — это коллекция всех произошедших мутаций в виде единого пакета. Для каждой мутации предоставляется информация о её типе и об изменениях, которые она представляет.
У созданного объекта есть три метода:
- Метод observe запускает процесс отслеживания изменений DOM. Он принимает два аргумента — узел DOM, за которым нужно наблюдать, и объект с параметрами.
- Метод disconnect останавливает наблюдение за изменениями.
- Метод takeRecords возвращает текущую очередь экземпляра MutationObserver , после чего очищает её.
Вот как включить наблюдение за изменениями:
Теперь предположим, что в DOM имеется простейший элемент div :
Используя jQuery, можно удалить атрибут class из этого элемента:
Благодаря тому, что мы начали наблюдение за изменениями, предварительно вызвав mutationObserver.observe(. ) , и тому, что функция, реагирующая на поступление нового пакета изменений, выводит полученные данные в консоль, мы увидим в консоли содержимое соответствующего объекта MutationRecord:
Тут можно видеть мутации, причиной которых стало удаление атрибута class .
И, наконец, для того, чтобы прекратить наблюдение за DOM после того, как работа завершена, можно сделать следующее:
Поддержка MutationObserver в различных браузерах
API MutationObserver пользуется широкой поддержкой в браузерах:
Альтернативы MutationObserver
Стоит отметить, что механизм наблюдениями за изменениями DOM, который предлагает MutationObserver , не всегда был доступен разработчикам. Чем они пользовались до появления MutationObserver ? Вот несколько вариантов:
- Опрос (polling).
- Механизм MutationEvents .
- CSS-анимация.
▍Опрос
Самый простой и незамысловатый способ отслеживания изменений DOM — опрос. Используя метод setInterval можно запланировать периодическое выполнение функции, которая проверяет DOM на предмет изменений. Естественно, использование этого метода значительно снижает производительность веб-приложений.
▍MutationEvents
API MutationEvents было представлено в 2000 году. Несмотря на то, что это API позволяет решать возлагаемые на него задачи, события мутации вызываются после каждого изменения DOM, что, опять же, приводит к проблемам с производительностью. Теперь API MutationEvents признано устаревшим и вскоре современные браузеры перестанут его поддерживать.
▍CSS-анимация
На самом деле, альтернатива MutationObserver в виде CSS-анимаций может показаться несколько странной. Причём тут анимация? В целом, идея тут заключается в создании анимации, которая будет вызвана после того, как элемент будет добавлен в DOM. В момент запуска анимации будет вызвано событие animationstart . Если назначить обработчик для этого события, можно узнать точное время добавления нового элемента в DOM. Время выполнения анимации при этом должно быть настолько маленьким, чтобы она была практически незаметна для пользователя.
Для того чтобы воспользоваться этим методом, сначала нужен родительский элемент, за добавлением в который новых узлов мы хотим наблюдать:
Для организации наблюдения за добавлением в него узлов нужно настроить последовательность ключевых кадров CSS-анимации, которые запустятся при добавлении узла:
После создания ключевых кадров анимация должна быть применена к элементам, за которыми нужно наблюдать. Обратите внимание на длительность анимации. Она очень мала, благодаря чему анимация оказывается практически незаметной.
Тут мы добавляем анимацию ко всем узлам-потомкам элемента container-element . Когда анимация заканчивается, вызывается соответствующее событие.
Теперь нужна JS-функция, которая будет играть роль обработчика событий. Внутри функции, в первую очередь, необходимо выполнить проверку event.animationName для того, чтобы убедиться, что это — именно та анимация, которая нас интересует.
Теперь добавим обработчик события к родительскому элементу. В разных браузерах это делается по-разному:
Вот как обстоит дело с поддержкой CSS-анимации в различных браузерах.
Поддержка CSS-анимации в различных браузерах
Итоги
Мы рассмотрели API MutationObserver и альтернативные способы наблюдения за изменениями DOM. Надо отметить, что MutationObserver имеет множество преимуществ перед этими альтернативами. В целом, можно говорить о том, что это API способно сообщать о любых изменениях, которые могут возникать в DOM, о том, что оно хорошо оптимизировано, давая информацию об изменениях, собранную в пакеты. Кроме того, API MutationObserver пользуется поддержкой всех основных современных браузеров, существуют и полифиллы для него, основанные на MutationEvents .
Автор материала отмечает, что MutationObserver занимает центральное место в библиотеке SessionStack, которая направлена на организацию сбора данных о том, что происходит с веб-страницами.
Предыдущие части цикла статей:
Уважаемые читатели! Пользуетесь ли вы MutationObserver в своих проектах?
Как удалить элемент DOM (JavaScript)
Удалить элемент (node) из DOM-объекта в JavaScript можно при помощи метода .removeChild(childNode).
Самый быстрый и простой способ удалить узел — найти элемент, выбрать его родительский узел при помощи .parentNode, и вызвать метод .removeChild(childNode).
parentNode и removeChild
Например у нас есть следующий HTML-код:
Узел ниже будет удален.
Чтобы удалить элемент div#delete_node, нужно выполнить следующий JavaScript-код:
Node.prototype.remove()
Еще более изящный способ — повесить на объект Node.prototype новый метод remove, вызвав который, элемент удалит сам себя.
При помощи этого метода можно удалить любой узел DOM, даже html, у которого есть свой parentNode — document.
Разумеется вызывать метод .remove(), можно только после загрузки всего DOM-дерева, повесив обработчик на событие DOMContentLoaded.
Как заменить дочерние узлы DOM на JavaScript?
Каков самый простой способ поменять порядок дочерних узлов?
Например, я хочу, чтобы childNode [3] был childNode [4] и наоборот.
Нет необходимости клонировать. Вы можете просто переместить один node перед другим с помощью этого:
Вы получаете родительский элемент node. Затем вы вызываете метод insertBefore родителя, и вы передаете ему childNode [4] node и скажите, что вы хотите, чтобы он вставлен перед childNode [3]. Это даст вам результат замены их порядка, так что 4 будет до 3, когда это будет сделано.
Любые node, которые вставляются в DOM, который уже находится в DOM, сначала удаляются автоматически, а затем вставляются обратно, поэтому нет необходимости вручную вручную удалять его.
Ответа на этот вопрос jfriend00 не делает swap элементов (он «свопирует» только те элементы, которые находятся рядом друг с другом и только под одним и тем же родителем node). Это нормально, так как это был вопрос.
Этот пример свопирует элементы, клонируя его, но независимо от их положения и уровня DOM:
Изменить: добавлен возврат новой ссылки (если вы хотите сохранить ссылку, например, для доступа к атрибуту «parentNode» (в противном случае он будет потерян)). Пример: e1 = exchangeElements (e1, e2);
Для реальной замены любых узлов без cloneNode:
С помощью функции SwapNode (используя PrototypeJS):
Используйте .before или .after !
Для более длительной замены, попробуйте:
Это должно работать, даже если родители не соответствуют
Попробуйте этот метод:
- Get the parent element
- Сохраните two elements you want to swap
Сохраните .nextSibling of the node that is last in order например: [1,2,3,4] = > мы хотим поменять местами 3 и 2, а затем сохранить nextSibling из 3, ‘4’.
Мне нужна была функция для обмена двумя произвольными узлами, поддерживающими замененные элементы в одном и том же месте в dom. Например, если a находилось в позиции 2 относительно своего родителя, а b находилось в позиции 0 относительно своего родителя, b должно заменить позицию 2 прежнего родителя, а a должно заменить ребенка 0 из прежнего родителя.
Это мое решение, которое позволяет свопу находиться в совершенно разных частях dom. Обратите внимание, что обмен не может быть простым трехступенчатым свопом. Каждый из двух элементов необходимо сначала удалить из dom, потому что у них могут быть братья и сестры, которые нуждаются в обновлении и т.д.
Решение. Я положил два держателя div, чтобы удерживать место каждого node, чтобы сохранить относительный порядок брата. Затем я повторно вставляю каждый из узлов в другой placeholder, сохраняя относительное положение, которое swapped node было перед свопом. (Мое решение похоже на Buck’s).
Информационные технологии, интернет, веб программирование, IT, Hi-Tech, …
Изменение Узлов
Здравствуйте, уважаемые читатели блога okITgo.ru! На этот раз мы поговорим о свойствах и методах DOM, позволяющих изменять узлы (точнее их значения) и атрибуты. К примеру свойство nodeValue можно использовать для изменения значения узла, а метод setAttribute() используется для изменения значения атрибута.
Попробуйте Сами – Примеры
Примеры ниже используют XML файл books.xml.
Функция loadXMLDoc(), определенная во внешнем скрипте JavaScript, используется для загрузки файла XML.
Изменить текстовый узел элементов
Этот пример использует свойство nodeValue для изменения текстового узла первого элемента в «books.xml».
Изменить значение атрибутов, используя setAttribute
Этот пример использует метод setAttribute() для изменения значения атрибута «category» первого элемента .
Изменить значение атрибутов посредством nodeValue
Данный пример использует свойство nodeValue для модификации значения атрибута «category» первого элемента .
Изменение Значения Элемента
В DOM любая сущность является узлом. Узлы элементов не имеют текстового значения.
Текст узла элемента хранится в его дочернем узле, который называется текстовым узлом.
Один из способов изменить текст элемента – поменять значение его дочернего текстового узла.
Изменить Значение Текстового Узла
Свойство nodeValue может использоваться для модификации значения текстового узла.
Следующий код меняет текстовое значение первого элемента :
Пример
xmlDoc=loadXMLDoc(«books.xml»); |
x=xmlDoc.getElementsByTagName(«title»)[0].childNodes[0];
x.nodeValue=»Самогон как Лечебное Средство»;
Попробуйте сами »
- Загружаем «books.xml» в xmlDoc посредством loadXMLDoc()
- Получаем текстовый узел первого элемента
- Меняем значение узла для текстового узла на «Самогон как Лечебное Средство»
Циклический обход и изменение текстового узла всех элементов : Попробуйте сами
Изменение Значения Атрибута
В DOM все атрибуты – это узлы. В отличие от узлов элементов, узлы атрибутов имеют текстовые значения.
Один из способов изменить значение атрибута – изменить его текстовое значение.
Это может быть сделано с помощью метода setAttribute() или посредством изменения свойства nodeValue атрибутивного узла.
Модификация Атрибута с Помощью Метода setAttribute()
Метод setAttribute() устанавливает значение существующего атрибута или создает новый атрибут.
Следующий код изменяет атрибут категории (category) элемента :
Пример
xmlDoc=loadXMLDoc(«books.xml»); |
x=xmlDoc.getElementsByTagName(‘book’);
x[0].setAttribute(«category»,»food»);
Попробуйте сами »
- Загружаем «books.xml» в xmlDoc, используя loadXMLDoc()
- Получаем первый элемент
- Меняем значение атрибута «category» на «ПИЩА»
Циклический обход всех элементов и добавление нового атрибута: Попробуйте сами
Замечание: Если атрибут не существует, то будет создан новый атрибут (с указанными именем и значением).
Изменение Атрибута Посредством nodeValue
Свойство nodeValue может быть использовано для изменения значения атрибутивного узла:
XML DOM — удаление узлов
RemoveChild () метод удаляет указанный узел.
removeAttribute () метод удаляет указанное свойство.
Попробуйте — Пример
В следующем примере используется XML — файлы в Books.xml .
Функция loadXMLDoc () , во внешнем JavaScript используется для загрузки файла XML.
Снимите узел элемента
В этом примере используется RemoveChild () для удаления первого элемента .
Удалить текущий узел элемента
В этом примере используется ParentNode и RemoveChild (), чтобы удалить текущий элемент .
Удалить текстовый узел
В этом примере используется RemoveChild () для удаления первого элемент текстового узла.
Очистить текстовый узел
В этом примере используется свойство nodeValue (), чтобы очистить первый элемент текстового узла.
Удалить атрибут по имени
В этом примере используется removeAttribute () исключить слово «категории» атрибут из первого элемента .
Удалить атрибуты в соответствии с объектом
В этом примере используется removeAttributeNode (), чтобы удалить все имущество из всех элемента .
Снимите узел элемента
RemoveChild () метод удаляет указанный узел.
Когда узел удаляется, все его дочерние узлы также удаляются.
Следующий фрагмент кода из загруженного XML удалить первый элемент :
примеров
- Используйте loadXMLDoc () , чтобы » в Books.xml » в xmlDoc
- Переменная Y устанавливается для удаления узла элемента
- Извлеките узел элемента из родительского узла с помощью метода RemoveChild ()
Удалить себя — удалить текущий узел
Метод RemoveChild () является единственным способом удалить указанный узел.
Когда вы должны перейти к узлу должен быть удален, вы можете удалить этот узел, используя ParentNode свойство и метод RemoveChild ():
примеров
- Используйте loadXMLDoc () , чтобы » в Books.xml » в xmlDoc
- Переменная Y устанавливается для удаления узла элемента
- Используя ParentNode свойство и метод RemoveChild (), чтобы удалить этот узел элемента
Удалить текстовый узел
RemoveChild () метод может быть использован для удаления текстовых узлов:
примеров
- Используйте loadXMLDoc () , чтобы » в Books.xml » в xmlDoc
- Переменная х устанавливается на узел элемента первого указанного в заголовке
- Переменная у установлен в текстовый узел должен быть удален
- Извлеките узел элемента из родительского узла с помощью метода RemoveChild ()
Менее распространенные RemoveChild () удалить текст из узла. Вы можете использовать вместо nodeValue свойство. Смотрите следующий параграф.
Пустые текстовые узлы
nodeValue свойство может быть использовано для изменения значения или пустой текстовый узел:
примеров
- Используйте loadXMLDoc () , чтобы » в Books.xml » в xmlDoc
- Переменная х устанавливается на элемент текстового узла первого заголовка
- Используйте nodeValue свойство, чтобы очистить текстовый узел
Через и изменить все тэги элемент текстового узла: Попробуйте
Удаление узла атрибута по имени
МетодremoveAttribute(имя) используется для удаления узла атрибута по имени.
Примеры: removeAttribute ( «категория»)
Следующий фрагмент кода удалить первый элемент «категория» атрибуты:
примеров
- Используйте loadXMLDoc () , чтобы » в Books.xml » в xmlDoc
- Используйте getElementsByTagName (), чтобы получить книгу узел
- Удалить «категорию» атрибут из элемента узла первая книга
Через и удалить все элемент «категория» Атрибуты: Попробуйте
Удалить узел атрибута, основанный на объекте
(Узел) методremoveAttributeNodeс помощью объекта узла в качестве параметра для удаления узла атрибута.
Примеры: removeAttributeNode (х)
Следующий фрагмент кода удаляет все атрибуты всех элементов :
примеров
for (i=0;i 0)
<
attnode=x[i].attributes[0];
old_att=x[i].removeAttributeNode(attnode);
>
>