Изменение документа
Добро пожаловать в новую главу на нашем канале "Изменение документа".
Модификации DOM – это ключ к созданию «живых» страниц.
Здесь мы увидим, как создавать новые элементы «на лету» и изменять уже существующие.
P.S. Найти все посты по этой главе вы можете с помощью комбинации хештегов, которые указаны ниже.
#браузер #документ #изменение
Добро пожаловать в новую главу на нашем канале "Изменение документа".
Модификации DOM – это ключ к созданию «живых» страниц.
Здесь мы увидим, как создавать новые элементы «на лету» и изменять уже существующие.
P.S. Найти все посты по этой главе вы можете с помощью комбинации хештегов, которые указаны ниже.
#браузер #документ #изменение
🔥3👍1
Пример: показать сообщение
Рассмотрим методы изменения документа на примере – а именно, добавим на страницу сообщение, которое будет выглядеть получше, чем
Это был пример HTML. Далее мы будем создавать такой же
#браузер #документ #изменение
Рассмотрим методы изменения документа на примере – а именно, добавим на страницу сообщение, которое будет выглядеть получше, чем
alert.Это был пример HTML. Далее мы будем создавать такой же
div, используя JavaScript (предполагаем, что стили в HTML или во внешнем CSS-файле).#браузер #документ #изменение
👍4🔥3
Хочешь знать основные языки программирования?
Подписывайся на канал Simple code.
Там тебя ждут ежедневные посты по разным языкам: JavaScript, C#, C++, Python, Java.
Подписывайся на канал Simple code.
Там тебя ждут ежедневные посты по разным языкам: JavaScript, C#, C++, Python, Java.
Создание элемента
DOM-узел можно создать двумя методами:
Большую часть времени нам нужно создавать узлы элементов, такие как
#браузер #документ #изменение
DOM-узел можно создать двумя методами:
document.createElement(tag) - создаёт новый элемент с заданным тегом.document.createTextNode(text) - создаёт новый текстовый узел с заданным текстом.Большую часть времени нам нужно создавать узлы элементов, такие как
div для сообщения.#браузер #документ #изменение
👍13❤2🔥1
Ты знаешь сколько получает Middle Python разработчик в России?
От 120 000 рублей!
Подписывайся на канал Python заметки и стань мидлом за считанные недели абсолютно бесплатно!
Эксклюзивный и актуальный материал, а также тесты по современному Python каждый день.
Расширяй свои знания с нами!
От 120 000 рублей!
Подписывайся на канал Python заметки и стань мидлом за считанные недели абсолютно бесплатно!
Эксклюзивный и актуальный материал, а также тесты по современному Python каждый день.
Расширяй свои знания с нами!
👍4🔥1
Создание сообщения
В нашем случае сообщение – это
Мы создали элемент, но пока он только в переменной. Мы не можем видеть его на странице, поскольку он не является частью документа.
#браузер #документ #изменение
В нашем случае сообщение – это
div с классом alert и HTML в нём.Мы создали элемент, но пока он только в переменной. Мы не можем видеть его на странице, поскольку он не является частью документа.
#браузер #документ #изменение
👍9🔥6
Методы вставки, append
Чтобы наш
Для этого есть метод
#браузер #документ #изменение
Чтобы наш
div появился, нам нужно вставить его где-нибудь в document. Например, в document.body.Для этого есть метод
append, в нашем случае: document.body.append(div).#браузер #документ #изменение
👍12🔥2
Методы вставки
Вот методы для различных вариантов вставки:
#браузер #документ #изменение
Вот методы для различных вариантов вставки:
node.append(...nodes or strings) – добавляет узлы или строки в конец node,node.prepend(...nodes or strings) – вставляет узлы или строки в начало node,node.before(...nodes or strings) – вставляет узлы или строки до node,node.after(...nodes or strings) – вставляет узлы или строки после node,node.replaceWith(...nodes or strings) – заменяет node заданными узлами или строками.#браузер #документ #изменение
👍13❤4🔥3
insertAdjacentHTML/Text/Element
С этим может помочь другой, довольно универсальный метод:
Первый параметр – это специальное слово, указывающее, куда по отношению к
Второй параметр – это HTML-строка, которая будет вставлена именно «как HTML».
#браузер #документ #изменение
С этим может помочь другой, довольно универсальный метод:
elem.insertAdjacentHTML(where, html).Первый параметр – это специальное слово, указывающее, куда по отношению к
elem производить вставку. Значение должно быть одним из следующих:"beforebegin" – вставить html непосредственно перед elem,"afterbegin" – вставить html в начало elem,"beforeend" – вставить html в конец elem,"afterend" – вставить html непосредственно после elem.Второй параметр – это HTML-строка, которая будет вставлена именно «как HTML».
#браузер #документ #изменение
👍16🔥1
Удаление узлов
Для удаления узла есть методы
Например, сделаем так, чтобы наше сообщение удалялось через секунду.
Если нам нужно переместить элемент в другое место – нет необходимости удалять его со старого.
Все методы вставки автоматически удаляют узлы со старых мест.
#браузер #документ #изменение
Для удаления узла есть методы
node.remove().Например, сделаем так, чтобы наше сообщение удалялось через секунду.
Если нам нужно переместить элемент в другое место – нет необходимости удалять его со старого.
Все методы вставки автоматически удаляют узлы со старых мест.
#браузер #документ #изменение
👍10❤2🔥2
Клонирование узлов: cloneNode
Как вставить ещё одно подобное сообщение?
Мы могли бы создать функцию и поместить код туда. Альтернатива – клонировать существующий
Иногда, когда у нас есть большой элемент, это может быть быстрее и проще.
Вызов
#браузер #документ #изменение
Как вставить ещё одно подобное сообщение?
Мы могли бы создать функцию и поместить код туда. Альтернатива – клонировать существующий
div и изменить текст внутри него (при необходимости).Иногда, когда у нас есть большой элемент, это может быть быстрее и проще.
Вызов
elem.cloneNode(true) создаёт «глубокий» клон элемента – со всеми атрибутами и дочерними элементами. Если мы вызовем elem.cloneNode(false), тогда клон будет без дочерних элементов.#браузер #документ #изменение
👍8🔥2
DocumentFragment
Мы можем добавить к нему другие узлы, но когда мы вставляем его куда-то, он «исчезает», вместо него вставляется его содержимое.
Например,
#браузер #документ #изменение
DocumentFragment является специальным DOM-узлом, который служит обёрткой для передачи списков узлов.Мы можем добавить к нему другие узлы, но когда мы вставляем его куда-то, он «исчезает», вместо него вставляется его содержимое.
Например,
getListContent ниже генерирует фрагмент с элементами <li>, которые позже вставляются в <ul>#браузер #документ #изменение
👍11🔥4
Устаревшие методы вставки/удаления
Есть несколько других, более старых, методов вставки и удаления, которые существуют по историческим причинам.
Сейчас уже нет причин их использовать, так как современные методы
Мы упоминаем о них только потому, что их можно найти во многих старых скриптах:
#браузер #документ #изменение
Есть несколько других, более старых, методов вставки и удаления, которые существуют по историческим причинам.
Сейчас уже нет причин их использовать, так как современные методы
append, prepend, before, after, remove, replaceWith более гибкие и удобные.Мы упоминаем о них только потому, что их можно найти во многих старых скриптах:
parentElem.appendChild(node)parentElem.insertBefore(node, nextSibling)parentElem.replaceChild(node, oldChild)parentElem.removeChild(node)#браузер #документ #изменение
👍8🔥1
Несколько слов о «document.write»
Есть ещё один, очень древний метод добавления содержимого на веб-страницу:
Вызов
Этот метод пришёл к нам со времён, когда ещё не было ни DOM, ни стандартов… Действительно старые времена. Он всё ещё живёт, потому что есть скрипты, которые используют его.
В современных скриптах он редко встречается из-за следующего важного ограничения:
Вызов
#браузер #документ #изменение
Есть ещё один, очень древний метод добавления содержимого на веб-страницу:
document.write.Вызов
document.write(html) записывает html на страницу «прямо здесь и сейчас». Строка html может быть динамически сгенерирована, поэтому метод достаточно гибкий. Мы можем использовать JavaScript, чтобы создать полноценную веб-страницу и записать её в документ.Этот метод пришёл к нам со времён, когда ещё не было ни DOM, ни стандартов… Действительно старые времена. Он всё ещё живёт, потому что есть скрипты, которые используют его.
В современных скриптах он редко встречается из-за следующего важного ограничения:
Вызов
document.write работает только во время загрузки страницы.#браузер #документ #изменение
👍11🔥4
Стили и классы
Как правило, существует два способа задания стилей для элемента:
1) Создать класс в CSS и использовать его:
2) Писать стили непосредственно в атрибуте
JavaScript может менять и классы, и свойство
Классы – всегда предпочтительный вариант по сравнению со
Например, использование
В других случаях, например, чтобы сделать текст красным, добавить значок фона – описываем это в CSS и добавляем класс (JavaScript может это сделать). Это более гибкое и лёгкое в поддержке решение.
#браузер #документ #стили_классы
Как правило, существует два способа задания стилей для элемента:
1) Создать класс в CSS и использовать его:
<div class="...">2) Писать стили непосредственно в атрибуте
style: <div style="...">.JavaScript может менять и классы, и свойство
style.Классы – всегда предпочтительный вариант по сравнению со
style. Мы должны манипулировать свойством style только в том случае, если классы «не могут справиться».Например, использование
style является приемлемым, если мы вычисляем координаты элемента динамически и хотим установить их из JavaScript.В других случаях, например, чтобы сделать текст красным, добавить значок фона – описываем это в CSS и добавляем класс (JavaScript может это сделать). Это более гибкое и лёгкое в поддержке решение.
#браузер #документ #стили_классы
👍5🔥1
className
Изменение класса является одним из наиболее часто используемых действий в скриптах.
Когда-то давно в JavaScript существовало ограничение: зарезервированное слово типа
Поэтому для классов было введено схожее свойство
#браузер #документ #стили_классы
Изменение класса является одним из наиболее часто используемых действий в скриптах.
Когда-то давно в JavaScript существовало ограничение: зарезервированное слово типа
"class" не могло быть свойством объекта. Это ограничение сейчас отсутствует, но в то время было невозможно иметь свойство elem.class.Поэтому для классов было введено схожее свойство
"className": elem.className соответствует атрибуту "class".#браузер #документ #стили_классы
👍15🔥4❤2
classList
Так что мы можем работать как со строкой полного класса, используя
Методы
#браузер #документ #стили_классы
elem.classList – это специальный объект с методами для добавления/удаления одного класса.Так что мы можем работать как со строкой полного класса, используя
className, так и с отдельными классами, используя classList. Выбираем тот вариант, который нам удобнее.Методы
classList:elem.classList.add/remove("class") – добавить/удалить класс.elem.classList.toggle("class") – добавить класс, если его нет, иначе удалить.elem.classList.contains("class") – проверка наличия класса, возвращает true/false.#браузер #документ #стили_классы
👍12🔥2
Element style
Свойство
Для свойства из нескольких слов используется camelCase.
#браузер #документ #стили_классы
Свойство
elem.style – это объект, который соответствует тому, что написано в атрибуте "style". Установка стиля elem.style.width="100px" работает так же, как наличие в атрибуте style строки width:100px.Для свойства из нескольких слов используется camelCase.
#браузер #документ #стили_классы
👍9🔥3❤1
Сброс стилей
Иногда нам нужно добавить свойство стиля, а потом, позже, убрать его.
Например, чтобы скрыть элемент, мы можем задать
Затем мы можем удалить свойство
Если мы установим в
#браузер #документ #стили_классы
Иногда нам нужно добавить свойство стиля, а потом, позже, убрать его.
Например, чтобы скрыть элемент, мы можем задать
elem.style.display = "none".Затем мы можем удалить свойство
style.display, чтобы вернуться к первоначальному состоянию. Вместо delete elem.style.display мы должны присвоить ему пустую строку: elem.style.display = "".Если мы установим в
style.display пустую строку, то браузер применит CSS-классы и встроенные стили, как если бы такого свойства style.display вообще не было.#браузер #документ #стили_классы
👍17🔥3
Полная перезапись
Обычно мы используем
Для задания нескольких стилей в одной строке используется специальное свойство
Это свойство редко используется, потому что такое присваивание удаляет все существующие стили: оно не добавляет, а заменяет их. Можно ненароком удалить что-то нужное. Но его можно использовать, к примеру, для новых элементов, когда мы точно знаем, что не удалим существующий стиль.
То же самое можно сделать установкой атрибута:
#браузер #документ #стили_классы
style.cssTextОбычно мы используем
style.* для присвоения индивидуальных свойств стиля. Нельзя установить список стилей как, например, div.style="color: red; width: 100px", потому что div.style – это объект, и он доступен только для чтения.Для задания нескольких стилей в одной строке используется специальное свойство
style.cssTextЭто свойство редко используется, потому что такое присваивание удаляет все существующие стили: оно не добавляет, а заменяет их. Можно ненароком удалить что-то нужное. Но его можно использовать, к примеру, для новых элементов, когда мы точно знаем, что не удалим существующий стиль.
То же самое можно сделать установкой атрибута:
div.setAttribute('style', 'color: red...').#браузер #документ #стили_классы
👍21🔥4
Следите за единицами измерения
Не забудьте добавить к значениям единицы измерения.
Например, мы должны устанавливать
Пожалуйста, обратите внимание, браузер «распаковывает» свойство
#браузер #документ #стили_классы
Не забудьте добавить к значениям единицы измерения.
Например, мы должны устанавливать
10px, а не просто 10 в свойство elem.style.top. Иначе это не сработает.Пожалуйста, обратите внимание, браузер «распаковывает» свойство
style.margin в последних строках и выводит style.marginLeft и style.marginTop из него.#браузер #документ #стили_классы
👍7🔥2