Основные источники
- DOM Living Standart
- HTML Living Standart
- Document Object Model (DOM) Level 3 Core Specification
- DOM Parsing and Serialization
Введение
JavaScript
предоставляет множество методов для работы с Document Object Model
или сокращенно DOM
(объектной моделью документа): одни из них являются более полезными, чем другие; одни используются часто, другие почти никогда; одни являются относительно новыми, другие признаны устаревшими.
Я постараюсь дать вам исчерпывающее представление об этих методах, а также покажу парочку полезных приемов, которые сделают вашу жизнь веб-разработчика немного легче.
Размышляя над подачей материала, я пришел к выводу, что оптимальным будет следование спецификациям с промежуточными и заключительными выводами, сопряженными с небольшими лирическими отступлениями.
Сильно погружаться в теорию мы не будем. Вместо этого, мы сосредоточимся на практической составляющей.
Для того, чтобы получить максимальную пользу от данной шпаргалки, пишите код вместе со мной и внимательно следите за тем, что происходит в консоли инструментов разработчика и на странице.
Вот как будет выглядеть наша начальная разметка:
<ul id="list" class="list">
<li id="item1" class="item">1</li>
<li id="item2" class="item">2</li>
<li id="item3" class="item">3</li>
</ul>
У нас есть список (ul
) с тремя элементами (li
). Список и каждый элемент имеют идентификатор (id
) и CSS-класс (class
). id
и class
— это атрибуты элемента. Существует множество других атрибутов: одни из них являются глобальными, т.е. могут добавляться к любому элементу, другие — локальными, т.е. могут добавляться только к определенным элементам.
Мы часто будем выводить данные в консоль, поэтому создадим такую «утилиту»:
const log = console.log
Миксин NonElementParentNode
Данный миксин предназначен для обработки (браузером) родительских узлов, которые не являются элементами.
В чем разница между узлами (nodes) и элементами (elements)? Если кратко, то «узлы» — это более общее понятие, чем «элементы». Узел может быть представлен элементом, текстом, комментарием и т.д. Элемент — это узел, представленный разметкой (HTML-тегами (открывающим и закрывающим) или, соответственно, одним тегом).
У рассматриваемого миксина есть метод, наследуемый от объекта Document
, с которого удобно начать разговор.
Небольшая оговорка: разумеется, мы могли бы создать список и элементы программным способом.
Для создания элементов используется метод createElement(tag)
объекта Document
:
const listEl = document.createElement('ul')
Такой способ создания элементов называется императивным. Он является не очень удобным и слишком многословным: создаем родительский элемент, добавляет к нему атрибуты по одному, внедряем его в DOM
, создаем первый дочерний элемент и т.д. Следует отметить, что существует и другой, более изысканный способ создания элементов — шаблонные или строковые литералы (template literals), но о них мы поговорим позже.
Одним из основных способов получения элемента (точнее, ссылки на элемент) является метод getElementById(id)
объекта Document
:
// получаем ссылку на наш список
const listEl = document.getElementById('list')
log(listEl)
// ul#list.list - такая запись означает "элемент `ul` с `id === list`" и таким же `class`
Почему идентификаторы должны быть уникальными в пределах приложения (страницы)? Потому что элемент с id
становится значением одноименного свойства глобального объекта window
:
log(listEl === window.list) // true
Как мы знаем, при обращении к свойствам и методам window
, слово window
можно опускать, например, вместо window.localStorage
можно писать просто localStorage
. Следовательно, для доступа к элементу с id
достаточно обратиться к соответствующему свойству window
:
log(list) // ul#list.list
Обратите внимание, что это не работает в React
и других фреймворках, абстрагирующих работу с DOM
, например, с помощью Virtual DOM
. Более того, там иногда невозможно обратиться к нативным свойствам и методам window
без window
.
Миксин ParentNode
Данный миксин предназначен для обработки родительских элементов (предков), т.е. элементов, содержащих одного и более потомка (дочерних элементов).
children
— потомки элемента
const { children } = list // list.children
log(children)
/*
HTMLCollection(3)
0: li#item1.item
1: li#item2.item
2: li#item3.item
length: 3
*/
Такая структура называется коллекцией HTML и представляет собой массивоподобный объект (псевдомассив). Существует еще одна похожая структура — список узлов (NodeList
).
Массивоподобные объекты имеют свойство length
с количеством потомков, метод forEach()
(NodeList
), позволяющий перебирать узлы (делать по ним итерацию). Такие объекты позволяют получать элементы по индексу, по названию (HTMLCollection
) и т.д. Однако, у них отсутствуют методы настоящих массивов, такие как map()
, filter()
, reduce()
и др., что делает работу с ними не очень удобной. Поэтому массивоподобные объекты рекомендуется преобразовывать в массивы с помощью метода Array.from()
или spread-оператора:
const children = Array.from(list.children)
// или
const children = [...list.children]
log(children) // [li#item1.item, li#item2.item, li#item3.item] - обычный массив
firstElementChild
— первый потомок — элементlastElementChild
— последний потомок — элемент
log(list.firstElementChild) // li#item1.item
log(list.lastElementChild) // li#item2.item
Для дальнейших манипуляций нам потребуется периодически создавать новые элементы, поэтому создадим еще одну утилиту:
const createEl = (id, text, tag = 'li', _class = 'item') => {
const el = document.createElement(tag)
el.id = id
el.className = _class
el.textContent = text
return el
}
Наша утилита принимает 4 аргумента: идентификатор, текст, название тега и CSS-класс. 2 аргумента (тег и класс) имеют значения по умолчанию. Функция возвращает готовый к работе элемент. Впоследствии, мы реализуем более универсальный вариант данной утилиты.
prepend(newNode)
— добавляет элемент в начало спискаappend(newNode)
— добавляет элемент в конец списка
// создаем новый элемент
const newItem = createEl('item0', 0)
// и добавляем его в начало списка
list.prepend(newItem)
// создаем еще один элемент
const newItem2 = createEl('item4', 4)
// и добавляем его в конец списка
list.append(newItem2)
log(children)
/*
HTMLCollection(5)
0: li#item0.item
1: li#item1.item
2: li#item2.item
3: li#item3.item
4: li#item4.item
*/
Одной из интересных особенностей HTMLCollection
является то, что она является «живой», т.е. элементы, возвращаемые по ссылке, и их количество обновляются автоматически. Однако, эту особенность нельзя использовать, например, для автоматического добавления обработчиков событий.
replaceChildren(nodes)
— заменяет потомков новыми элементами
const newItems = [newItem, newItem2]
// заменяем потомков новыми элементами
list.replaceChildren(...newItems) // list.replaceChildren(newItem, newItem2)
log(children) // 2
Наиболее универсальными способами получения ссылок на элементы являются методы querySelector(selector)
и querySelectorAll(selector)
. Причем, в отличие от getElementById()
, они могут вызываться на любом родительском элементе, а не только на document
. В качестве аргумента названным методам передается любой валидный CSS-селектор (id
, class
, tag
и т.д.):
// получаем элемент `li` с `id === item0`
const itemWithId0 = list.querySelector('#item0')
log(itemWithId0) // li#item0.item
// получаем все элементы `li` с `class === item`
const allItems = list.querySelectorAll('.item')
log(allItems) // массивоподобный объект
/*
NodeList(2)
0: li#item0.item
1: li#item4.item
length: 2
*/
Создадим универсальную утилиту для получения элементов:
const getEl = (selector, parent = document, single = true) => single ? parent.querySelector(selector) : [...parent.querySelectorAll(selector)]
Наша утилита принимает 3 аргумента: CSS-селектор, родительский элемент и индикатор количества элементов (один или все). 2 аргумента (предок и индикатор) имеют значения по умолчанию. Функция возвращает либо один, либо все элементы (в виде обычного массива), совпадающие с селектором, в зависимости от значения индикатора:
const itemWithId0 = getEl('#item0', list)
log(itemWithId0) // li#item0.item
const allItems = getEl('.item', list, false)
log(allItems) // [li#item0.item, li#item4.item]
Миксин NonDocumentTypeChildNode
Данный миксин предназначен для обработки дочерних узлов, которые не являются документом, т.е. всех узлов, кроме document
.
previousElementSibling
— предыдущий элементnextElementSibling
— следующий элемент
log(itemWithId0.previousElementSibling) // null
log(itemWithId0.nextElementSibling) // #item4
Миксин ChildNode
Данный миксин предназначен для обработки дочерних элементов, т.е. элементов, являющихся потомками других элементов.
before(newNode)
— вставляет новый элемент перед текущимafter(newNode)
— вставляет новый элемент после текущего
// получаем `li` с `id === item4`
const itemWithId4 = getEl('#item4', list)
// создаем новый элемент
const newItem3 = createEl('item3', 3)
// и вставляем его перед `itemWithId4`
itemWithId4.before(newItem3)
// создаем еще один элемент
const newItem4 = createEl('item2', 2)
// и вставляем его после `itemWithId0`
itemWithId0.after(newItem4)
replaceWith(newNode)
— заменяет текущий элемент новым
// создаем новый элемент
const newItem5 = createEl('item1', 1)
// и заменяем им `itemWithId0`
itemWithId0.replaceWith(newItem5)
remove()
— удаляет текущий элемент
itemWithId4.remove()
Интерфейс Node
Данный интерфейс предназначен для обработки узлов.
nodeType
— тип узла
log(list.nodeType) // 1
// другие варианты
/*
1 -> ELEMENT_NODE (элемент)
3 -> TEXT_NODE (текст)
8 -> COMMENT_NODE (комментарий)
9 -> DOCUMENT_NODE (document)
10 -> DOCUMENT_TYPE_NODE (doctype)
11 -> DOCUMENT_FRAGMENT_NODE (фрагмент) и т.д.
*/
nodeName
— название узла
log(list.nodeName) // UL
// другие варианты
/*
- квалифицированное название HTML-элемента прописными (заглавными) буквами
- квалифицированное название атрибута
- #text
- #comment
- #document
- название doctype
- #document-fragment
*/
baseURI
— основной путь
log(list.baseURI) // .../dom/index.html
parentNode
— родительский узелparentElement
— родительский элемент
const itemWithId1 = getEl('#item1', list)
log(itemWithId1.parentNode) // #list
log(itemWithId1.parentElement) // #list
hasChildNodes()
— возвращаетtrue
, если элемент имеет хотя бы одного потомкаchildNodes
— дочерние узлы
log(list.hasChildNodes()) // true
log(list.childNodes)
/*
NodeList(3)
0: li#item1.item
1: li#item2.item
2: li#item3.item
*/
firstChild
— первый потомок — узелlastChild
— последний потомок — узел
log(list.firstChild) // #item1
log(list.lastChild) // #item3
nextSibling
— следующий узелpreviousSibling
— предыдущий узел
log(itemWithId1.nextSibling) // #item2
log(itemWithId1.previousSibling) // null
textContent
— геттер/сеттер для извлечения/записи текста
// получаем текст
log(itemWithId1.textContent) // 1
// меняем текст
itemWithId1.textContent = 'item1'
log(itemWithId1.textContent) // item1
// получаем текстовое содержимое всех потомков
log(list.textContent) // item123
Для извлечения/записи текста существует еще один (устаревший) геттер/сеттер — innerText
.
cloneNode(deep)
— копирует узел. Принимает логическое значение, определяющее характер копирования: поверхностное — копируется только сам узел, глубокое — копируется сам узел и все его потомки
// создаем новый список посредством копирования существующего
const newList = list.cloneNode(false)
// удаляем у него `id` во избежание коллизий
newList.removeAttribute('id')
// меняем его текстовое содержимое
newList.textContent = 'new list'
// и вставляем его после существующего списка
list.after(newList)
// создаем еще один список
const newList2 = newList.cloneNode(true)
newList.after(newList2)
isEqualNode(node)
— сравнивает узлыisSameNode(node)
— определяет идентичность узлов
log(newList.isEqualNode(newList2)) // true
log(newList.isSameNode(newList2)) // false
contains(node)
— возвращаетtrue
, если элемент содержит указанный узел
log(list.contains(itemWithId1)) // true
insertBefore(newNode, existingNode)
— добавляет новый узел (newNode
) перед существующим (existingNode
)
// создаем новый элемент
const itemWithIdA = createEl('#item_a', 'a')
// и вставляем его перед `itemWithId1`
list.insertBefore(itemWithIdA, itemWithId1)
appendChild(node)
— добавляет узел в конец списка
// создаем новый элемент
const itemWithIdC = createEl('#item_c', 'c')
// и добавляем его в конец списка
list.appendChild(itemWithIdC)
replaceChild(newNode, existingNode)
— заменяет существующий узел (existingNode
) новым (newNode
):
// создаем новый элемент
const itemWithIdB = createEl('item_b', 'b')
// и заменяем им `itemWithId1`
list.replaceChild(itemWithIdB, itemWithId1)
removeChild(node)
— удаляет указанный дочерний узел
// получаем `li` с `id === item2`
const itemWithId2 = getEl('#item2', list)
// и удаляем его
list.removeChild(itemWithId2)
Интерфейс Document
Данный интерфейс предназначен для обработки объекта Document
.
URL
иdocumentURI
— адрес документа
log(document.URL) // .../dom/index.html
log(document.documentURI) // ^
documentElement
:
log(document.documentElement) // html
getElementsByTagName(tag)
— возвращает все элементы с указанным тегом
const itemsByTagName = document.getElementsByTagName('li')
log(itemsByTagName)
/*
HTMLCollection(4)
0: li##item_a.item
1: li#item_b.item
2: li#item3.item
3: li##item_c.item
*/
getElementsByClassName(className)
— возвращает все элементы с указанным CSS-классом
const itemsByClassName = list.getElementsByClassName('item')
log(itemsByClassName) // ^
createDocumentFragment()
— возвращает фрагмент документа:
// создаем фрагмент
const fragment = document.createDocumentFragment()
// создаем новый элемент
const itemWithIdD = createEl('item_d', 'd')
// добавляем элемент во фрагмент
fragment.append(itemWithIdD)
// добавляем фрагмент в список
list.append(fragment)
Фрагменты позволяют избежать создания лишних элементов. Они часто используются при работе с разметкой, скрытой от пользователя с помощью тега template
(метод cloneNode()
возвращает DocumentFragment
).
-
createTextNode(data)
— создает текст -
createComment(data)
— создает комментарий -
importNode(existingNode, deep)
— создает новый узел на основе существующего
// создаем новый список на основе существующего
const newList3 = document.importNode(list, true)
// вставляем его перед существующим списком
list.before(newList3)
// и удаляем во избежание коллизий
newList3.remove()
createAttribute(attr)
— создает указанный атрибут
Интерфейсы NodeIterator
и TreeWalker
Интерфейсы NodeIterator
и TreeWalker
предназначены для обхода (traverse) деревьев узлов. Я не сталкивался с примерами их практического использования, поэтому ограничусь парочкой примеров:
// createNodeIterator(root, referenceNode, pointerBeforeReferenceNode, whatToShow, filter)
const iterator = document.createNodeIterator(list)
log(iterator)
log(iterator.nextNode()) // #list
log(iterator.nextNode()) // #item_a
log(iterator.previousNode()) // #item_a
log(iterator.previousNode()) // #list
log(iterator.previousNode()) // null
// createTreeWalker(root, whatToShow, filter)
// применяем фильтры - https://dom.spec.whatwg.org/#interface-nodefilter
const walker = document.createTreeWalker(list, '0x1', { acceptNode: () => 1 })
log(walker)
log(walker.parentNode()) // null
log(walker.firstChild()) // #item_a
log(walker.lastChild()) // null
log(walker.previousSibling()) // null
log(walker.nextSibling()) // #item_b
log(walker.nextNode()) // #item3
log(walker.previousNode()) // #item_b
Интерфейс Element
Данный интерфейс предназначен для обработки элементов.
localName
иtagName
— название тега
log(list.localName) // ul
log(list.tagName) // UL
id
— геттер/сеттер для идентификатораclassName
— геттер/сеттер для CSS-класса
log(list.id) // list
list.id = 'LIST'
log(LIST.className) // list
classList
— все CSS-классы элемента (объектDOMTokenList
)
const button = createEl('button', 'Click me', 'my_button', 'btn btn-primary')
log(button.classList)
/*
DOMTokenList(2)
0: "btn"
1: "btn-primary"
length: 2
value: "btn btn-primary"
*/
Работа с classList
classList.add(newClass)
— добавляет новый класс к существующимclassList.remove(existingClass)
— удаляет указанный классclassList.toggle(className, force?)
— удаляет существующий класс или добавляет новый. Если опциональный аргументforce
имеет значениеtrue
, данный метод только добавляет новый класс при отсутствии, но не удаляет существующий класс (в этом случаеtoggle() === add()
). Еслиforce
имеет значениеfalse
, данный метод только удаляет существующий класс при наличии, но не добавляет отсутствующий класс (в этом случаеtoggle() === remove()
)classList.replace(existingClass, newClass)
— заменяет существующий класс (existingClass
) на новый (newClass
)classList.contains(className)
— возвращаетtrue
, если указанный класс обнаружен в списке классов элемента (данный метод идентиченclassName.includes(className)
)
// добавляем к кнопке новый класс
button.classList.add('btn-lg')
// удаляем существующий класс
button.classList.remove('btn-primary')
// у кнопки есть класс `btn-lg`, поэтому он удаляется
button.classList.toggle('btn-lg')
// заменяем существующий класс на новый
button.classList.replace('btn', 'btn-success')
log(button.className) // btn-success
log(button.classList.contains('btn')) // false
log(button.className.includes('btn-success')) // true
Работа с атрибутами
hasAttributes()
— возвращаетtrue
, если у элемента имеются какие-либо атрибутыgetAttributesNames()
— возвращает названия атрибутов элементаgetAttribute(attrName)
— возвращает значение указанного атрибутаsetAttribute(name, value)
— добавляет указанные атрибут и его значение к элементуremoveAttribute(attrName)
— удаляет указанный атрибутhasAttribute(attrName)
— возвращаетtrue
при наличии у элемента указанного атрибутаtoggleAttribute(name, force)
— добавляет новый атрибут при отсутствии или удаляет существующий атрибут. Аргументforce
аналогичен одноименному атрибутуclassList.toggle()
log(button.hasAttributes()) // true
log(button.getAttributeNames()) // ['id', 'class']
log(button.getAttribute('id')) // button
button.setAttribute('type', 'button')
button.removeAttribute('class')
log(button.hasAttribute('class')) // false
В использовании перечисленных методов для работы с атрибутами нет особой необходимости, поскольку многие атрибуты являются геттерами/сеттерами, т.е. позволяют извлекать/записывать значения напрямую. Единственным исключением является метод removeAttribute()
, поскольку существуют атрибуты без значений: например, если кнопка имеет атрибут disabled
, установка значения данного атрибута в false
не приведет к снятию блокировки — для этого нужно полностью удалить атрибут disabled
с помощью removeAttribute()
.
Отдельного упоминания заслуживает атрибут data-*
, где символ *
означает любую строку. Он предназначен для определения пользовательских атрибутов. Например, в нашей начальной разметке для уникальной идентификации элементов используется атрибут id
. Однако, это приводит к загрязнению глобального пространства имен, что чревато коллизиями между нашими переменными и, например, переменными используемой нами библиотеки — когда какой-либо объект библиотеки пытается записаться в свойство window
, которое уже занято нашим id
.
Вместо этого, мы могли бы использовать атрибут data-id
и получать ссылки на элементы с помощью getEl('[data-id="id"]')
.
Название data-атрибута после символа -
становится одноименным свойством объекта dataset
. Например, значение атрибута data-id
можно получить через свойство dataset.id
.
closest(selectors)
— возвращает первый родительский элемент, совпавший с селекторами
LIST.append(button)
log(button.closest('#LIST', 'document.body')) // #LIST
matches(selectors)
— возвращаетtrue
, если элемент совпадает хотя бы с одним селектором
log(button.matches('.btn', '[type="button"]'))
// у кнопки нет класса `btn`, но есть атрибут `type` со значением `button`,
// поэтому возвращается `true`
-
insertAdjacentElement(where, newElement)
— универсальный метод для вставки новых элементов перед/в начало/в конец/после текущего элемента. Аргументwhere
определяет место вставки. Возможные значения:beforebegin
— перед открывающим тегомafterbegin
— после открывающего тегаbeforeend
— перед закрывающим тегомafterend
— после закрывающего тега
-
insertAdjacentText(where, data)
— универсальный метод для вставки текста -
Text
— конструктор для создания текста -
Comment
— конструктор для создания комментария
const text = new Text('JavaScript')
log(text) // "JavaScript"
const part = text.splitText(4)
log(part) // "Script"
log(part.wholeText()) // Script
const comment = new Comment('TODO')
log(comment) // <!--TODO-->
Объект Document
location
— объект с информацией о текущей локации документа
log(document.location)
Свойства объекта location
:
hash
— хэш-часть URL (символ#
и все, что следует за ним), например,#top
host
— название хоста и порт, например,localhost:3000
hostname
— название хоста, например,localhost
href
— полный путьorigin
—protocol
+host
pathname
— путь без протоколаport
— порт, например,3000
protocol
— протокол, например,https
search
— строка запроса (символ?
и все, что следует за ним), например,?name=John&age=30
Методы location
:
-
reload()
— перезагружает текущую локацию -
replace()
— заменяет текущую локацию на новую -
title
— заголовок документа
log(document.title) // DOM
-
head
— метаданные документа -
body
— тело документа -
images
— псевдомассив (HTMLCollection
), содержащий все изображения, имеющиеся в документе
const image = document.createElement('img')
image.className = 'my_image'
image.src = 'https://miro.medium.com/max/875/1*ZIH_wjqDfZn6NRKsDi9mvA.png'
image.alt = "V8's compiler pipeline"
image.width = 480
document.body.append(image)
log(document.images[0]) // .my_image
links
— псевдомассив, содержащий все ссылки, имеющиеся в документе
const link = document.createElement('a')
link.className = 'my_link'
link.href = 'https://github.com/azat-io/you-dont-know-js-ru'
link.target = '_blank'
link.rel = 'noopener noreferrer'
link.textContent = 'Вы не знаете JS'
document.body.append(link)
log(document.links[0]) // .my_link
forms
— псевдомассив, содержащий все формы, имеющиеся в документе
const form = document.createElement('form')
form.className = 'my_form'
document.body.append(form)
log(document.forms[0]) // .my_form
Следующие методы и свойство считаются устаревшими:
open()
— открывает документ для записи. При этом документ полностью очищаетсяclose()
— закрывает документ для записиwrite()
— записывает данные (текст, разметку) в документwriteln()
— записывает данные в документ с переносом на новую строкуdesignMode
— управление режимом редактирования документа. Возможные значения:on
иoff
. Наберитеdocument.designMode = 'on'
в консолиDevTools
и нажмитеEnter
. Вуаля, страница стала редактируемой: можно удалять/добавлять текст, перетаскивать изображения и т.д.execCommand()
— выполняет переданные команды. Со списоком доступных команд можно ознакомиться здесь. Раньше этот метод активно использовался для записи/извлечения данных из буфера обмена (командыcopy
иpaste
). Сейчас для этого используются методыnavigator.clipboard.writeText()
,navigator.clipboard.readText()
и др.
Миксин InnerHTML
Геттер/сеттер innerHTML
позволяет извлекать/записывать разметку в элемент. Для подготовки разметки удобно пользоваться шаблонными литералами:
const itemsTemplate = `
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
`
LIST.innerHTML = itemsTemplate
log(LIST.innerHTML)
/*
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
*/
Расширения интерфейса Element
outerHTML
— геттер/сеттер для извлечения/записи внешней разметки элемента: то, что возвращаетinnerHTML
+ разметка самого элемента
log(LIST.outerHTML)
/*
<ul id="LIST" class="list">
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
</ul>
*/
insertAdjacentHTML(where, string)
— универсальный метод для вставки разметки в виде строки. Аргументwhere
аналогичен одноименному аргументу методаinsertAdjacentElement()
Метод insertAdjacentHTML()
в сочетании с шаблонными литералами и их продвинутой версией — тегированными шаблонными литералами (tagged template literals) предоставляет много интересных возможностей по манипулированию разметкой документа. По сути, данный метод представляет собой движок шаблонов (template engine) на стороне клиента, похожий на Pug
, Handlebars
и др. серверные движки. С его помощью (при участии History API
) можно, например, реализовать полноценное одностраничное приложение (Single Page Application
или сокращенно SPA
). Разумеется, для этого придется написать чуть больше кода, чем при использовании какого-либо фронтенд-фреймворка.
Вот несколько полезных ссылок, с которых можно начать изучение этих замечательных инструментов:
- Element.insertAdjacentHTML() — MDN
- Изменение документа — JSR
- Шаблонные строки — MDN
- Template Literals — ECMAScript 2022
Иногда требуется создать элемент на основе шаблонной строки. Как это можно сделать? Вот соответствующая утилита:
const createElFromStr = (str) => {
// создаем временный элемент
const el = document.createElement('div')
// записываем в него переданную строку - разметку
el.innerHTML = str
// извлекаем наш элемент
// если мы используем здесь метод `firstChild()`, может вернуться `#text`
// одна из проблем шаблонных строк заключается в большом количестве лишних пробелов
const child = el.fisrtElementChild
// удаляем временный элемент
el.remove()
// и возвращаем наш элемент
return child
}
// шаблон списка
const listTemplate = `
<ul id="list">
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
</ul>
`
// создаем список на основе шаблона
const listEl = createElFromStr(listTemplate)
// и вставляем его в тело документа
document.body.append(listEl)
Существует более экзотический способ создания элемента на основе шаблонной строки. Он предполагает использование конструктора DOMParser()
:
const createElFromStr = (str) => {
// создаем новый парсер
const parser = new DOMParser()
// парсер возвращает новый документ
const {
body: { children }
} = parser.parseFromString(str, 'text/html')
// нас интересует первый дочерний элемент тела нового документа
return children[0]
}
const listTemplate = `
<ul id="list">
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
</ul>
`
const listEl = createElFromStr(listTemplate)
document.body.append(listEl)
Еще более экзотический, но при этом самый короткий способ предполагает использование расширения для объекта Range
— метода createContextualFragment()
:
const createElFromStr = (str) => {
// создаем новый диапазон
const range = new Range()
// создаем фрагмент
const fragment = range.createContextualFragment(str)
// и возвращаем его
return fragment
}
// или в одну строку
const createFragment = (str) => new Range().createContextualFragment(str)
const listTemplate = `
<ul id="list">
<li data-id="item1" class="item">1</li>
<li data-id="item2" class="item">2</li>
<li data-id="item3" class="item">3</li>
</ul>
`
document.body.append(createFragment(listTemplate))
В завершение, как и обещал, универсальная утилита для создания элементов:
// функция принимает название тега и объект с настройками
const createEl = (tag, opts) => {
const el = document.createElement(tag)
// перебираем ключи объекта и записывает соответствующие свойства в элемент
for (const key in opts) {
el[key] = opts[key]
}
// возвращаем готовый элемент
return el
}
const button = createEl('button', {
// настройками могут быть атрибуты
id: 'my_button',
className: 'btn btn-primary',
textContent: 'Click me',
title: 'My button',
autofocus: true,
// стили
style: 'color: red; cursor: pointer;',
// обработчики и т.д.
onmouseenter: function () {
this.style.color = 'green'
},
onmouseout: function () {
this.style.color = 'blue'
},
onclick: () => alert('Привет!')
})
document.body.append(button)
Заключение
Современный JS
предоставляет богатый арсенал методов для работы с DOM
. Данных методов вполне достаточно для решения всего спектра задач, возникающих при разработке веб-приложений. Хорошее знание этих методов, а также умение их правильно применять гарантируют не только высокое качество (чистоту) кода, но также избавляют от необходимости использовать DOM-библиотеки (такие как jQuery
), что в совокупности обусловливает производительность приложения, его поддерживаемость и масштабируемость.
Разумеется, шпаргалка — это всего лишь карманный справочник, памятка для быстрого восстановления забытого материала, предполагающая наличие определенного багажа знаний.
VDS от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
- Как правильно пишется слово «неизменный»
- Как правильно пишется слово «вид»
Делаем Карту слов лучше вместе
Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать
Карту слов. Я отлично
умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!
Спасибо! Я стал чуточку лучше понимать мир эмоций.
Вопрос: тореадор — это что-то нейтральное, положительное или отрицательное?
Ассоциации к слову «вид»
Синонимы к словосочетанию «в неизменном виде»
Предложения со словосочетанием «в неизменном виде»
- Так появился первый камин, который практически в неизменном виде сохранился до наших дней.
- Многие из них существуют в неизменном виде веками, что означает, что эти инструменты, безусловно, кому-то выгодны.
- Нормы языка стабильны, устойчивы, долго сохраняются в неизменном виде.
- (все предложения)
Цитаты из русской классики со словосочетанием «в неизменном виде»
- Он начинал полемизировать с утра. Когда он приходил в правление, первое лицо, с которым он встречался в передней, был неизменный мещанин Прохоров, подобранный в бесчувственном виде на улице и посаженный в часть. В прежнее время свидание это имело, в глазах помпадура, характер обычая и заканчивалось словом: «влепить!» Теперь — на первый план выступила полемика, то есть терзание, отражающееся не столько на Прохорове, сколько на самом помпадуре.
- Как! когда заводы на Урале в течение двух веков пользовались неизменным покровительством государства, которое поддерживало их постоянными субсидиями, гарантиями и высокими тарифами; когда заводчикам задаром были отданы миллионы десятин на Урале с лесами, водами и всякими минеральными сокровищами, только насаждай отечественную горную промышленность; когда на Урале во имя тех же интересов горных заводов не могли существовать никакие огнедействующие заведения, и уральское железо должно совершать прогулку во внутреннюю Россию, чтобы оттуда вернуться опять на Урал в виде павловских железных и стальных изделий, и хромистый железняк, чтобы превратиться в краску, отправлялся в Англию, — когда все это творилось, конечно, притязания какого-то паршивого земства, которое ни с того ни с сего принялось обкладывать заводы налогами, эти притязания просто были смешны.
- А между тем, как ни припоминал потом князь, выходило, что Аглая произнесла эти буквы не только без всякого вида шутки, или какой-нибудь усмешки, или даже какого-нибудь напирания на эти буквы, чтобы рельефнее выдать их затаенный смысл, но, напротив, с такою неизменною серьезностью, с такою невинною и наивною простотой, что можно было подумать, что эти самые буквы и были в балладе, и что так было в книге напечатано.
- (все
цитаты из русской классики)
Значение слова «неизменный»
-
НЕИЗМЕ́ННЫЙ, —ая, —ое; —ме́нен, —ме́нна, —ме́нно. 1. Остающийся всегда одним и тем же, не меняющийся; постоянный. Неизменное правило. Неизменные принципы. (Малый академический словарь, МАС)
Все значения слова НЕИЗМЕННЫЙ
Значение слова «вид»
-
ВИД1, -а (-у), предл. о ви́де, в ви́де, в виду́, на виду́, м. 1. Внешний облик кого-, чего-л., внешность, наружность. — [Ваня] худенький, кашляет…
ВИД2, -а, м. 1. Разновидность, тип. (Малый академический словарь, МАС)
Все значения слова ВИД
Афоризмы русских писателей со словом «неизменный»
- Молодой моряк вселенной,
Мира древний дровосек,
Неуклонный, неизменный,
Будь прославлен, Человек! - В жизни человека есть незыблемые моменты, неизменные жесты и слова, которые повторяются в каждой жизни с ненарушимым постоянством: смерть, любовь, самопожертвование.
- Лишь в неизменном — бесконечность,
Лишь в постоянном — глубина.
И дальше путь, и ближе вечность,
И все ясней: любовь одна. - (все афоризмы русских писателей)
Смотрите также
НЕИЗМЕ́ННЫЙ, —ая, —ое; —ме́нен, —ме́нна, —ме́нно. 1. Остающийся всегда одним и тем же, не меняющийся; постоянный. Неизменное правило. Неизменные принципы.
Все значения слова «неизменный»
ВИД1, -а (-у), предл. о ви́де, в ви́де, в виду́, на виду́, м. 1. Внешний облик кого-, чего-л., внешность, наружность. — [Ваня] худенький, кашляет…
ВИД2, -а, м. 1. Разновидность, тип.
Все значения слова «вид»
-
Так появился первый камин, который практически в неизменном виде сохранился до наших дней.
-
Многие из них существуют в неизменном виде веками, что означает, что эти инструменты, безусловно, кому-то выгодны.
-
Нормы языка стабильны, устойчивы, долго сохраняются в неизменном виде.
- (все предложения)
- первоначальный вид
- в изменённом виде
- нынешний вид
- исходный вид
- сохраняться неизменным
- (ещё синонимы…)
- окно
- редкий
- аспект
- особь
- пейзаж
- (ещё ассоциации…)
- Разбор по составу слова «неизменный»
- Разбор по составу слова «вид»
- Как правильно пишется слово «неизменный»
- Как правильно пишется слово «вид»
Если после корня есть «а» – пишем «мир», если нет – «мер». Например: замирать – замереть.
1 071
Автор: Алексей Морозов
Дата: 16.06.2021
В слове с корнем «мир» пишется «и», если после него идет буква «а». Если ее нет – надо писать «е». Примеры: отмереть – отмирать, замереть – замирать.
Собственно, вот и все правило. Тем не менее, советую вам прочитать статью полностью, потому что я буду рассказывать, как правильно комментировать эту орфограмму в школе. А еще рассмотрю несколько «проблемных» случаев. В конце статьи по традиции предложу вам хорошие полезные материалы.
Что надо знать про корни «мер» и «мир»
В русском языке у этих корней есть особое название – «корни с чередующейся гласной». Давайте я вам один раз и навсегда объясню, что это значит.
В большинстве слов корни и другие морфемы (приставки, суффиксы) пишутся единообразно. То есть если мы в слове «корова» пишем корень «коров», то все другие слова с этим корнем мы будем писать так же. И получится «коровник», а не «каровник», «коровье», а не «каровье» и т. д.
Но бывают корни, в которых одна или несколько букв чередуются. То есть корень абсолютно один и тот же, слова родственные, но буквы разные. Например: замереть – замирать, положить – полагать, выдирать – выдергивать.
Чтобы писать эти корни правильно, надо знать про условия чередования. Самым распространенным условием является наличие буквы «а» после корня. Если она там есть, то мы пишем «и», а если ее нет – «е».
Можно ли проверять «мер», «мир» ударением
Нет, нельзя ни в коем случае. Вот смотрите, перед вами слово «отм…рать». Вы подбираете проверочное слово с ударным корнем – «мёртвый». И пишете «е» – «отмерать». Даже Ворд это слово подсвечивает как ошибку.
Корни с чередованием никогда не проверяются ударением. Проверять их можно только через условия чередования. Если выполняется одно условие – пишем одну букву, если другое – другую.
Как правильно объяснять орфограмму в этих корнях в школе
Если вы учитесь в школе, особенно внимательно прочитайте эту часть статьи.
Сразу обращаю внимание на важный момент. «А» после корня является суффиксом. Он всегда именно «вот такой», то есть никаких других букв в нем не будет. Теперь давайте разберем алгоритм объяснения.
Объясняем корень «мер»
Предположим, что вам встретилось слово «зам…р». Что вы должны с ним сделать?
- Написать с буквой «е».
- Поставить ударение. Оно будет падать на букву «а».
- Подчеркнуть «е» одной чертой. Тем самым вы показываете, что она в безударном положении и вы сомневаетесь в ее написании.
- Выделить корень. Им будет «мер».
- Написать в скобках после слова следующее объяснение: «нет а».
- Букву «а» выделить как суффикс (нарисуйте треугольничек), провести под ней две черточки.
Всё.
А вот шпаргалка для устного объяснения:
- В слове «замер» пропущен безударный гласный «е».
- В корне «мер».
- Пишем «е», потому что нет суффикса «а».
Произнесите этот текст еще раз мысленно, чтобы хорошо его запомнить.
Объясняем корень «мир»
Для примера возьмем словечко «зам…рать». Ваши действия при выполнении письменной работы:
- Написать слово с буквой «и».
- Поставить ударение. Оно падает на букву «а», которая после «р».
- Подчеркнуть «и» одной чертой. Мы аналогично в ней сомневаемся.
- Выделить корень «мир».
- Букву «а» выделить как суффикс, подчеркнуть двумя чертами.
В скобках теперь писать ничего не надо, потому что мы сделали объяснение непосредственно в слове.
На уроке при ответе у доски вы должны сказать следующее:
- В слове «замирать» пропущен безударный гласный «и».
- В корне «мир».
- Мы написали «е», потому что после корня есть «а».
Вот и все. Я думаю, это достаточно просто.
Как быть со словом «мирный» и другими подобными
Иногда у учеников возникает вопрос: “А вот слово «мирный». В нем корень «мир». Буквы «а» после него нет. А почему же мы там пишем «и»?”
Простое объяснение такое. Потому что на этот корень падает ударение. А гласная под ударением всегда пишется так, как слышится. У нас никогда не возникает сомнений в ее написании.
Более сложное объяснение следующее. «Мир» в слове «мирный» и «мир» в словах «замирать», «вымирать» – это не один и тот же корень.
Я думаю, из начальной школы вы помните, что однокоренные слова – это такие слова, у которых родственное значение. «Вода» и «водитель» – не однокоренные, потому что водитель с водой вообще никак не связан. Водитель «водит».
Вот точно так же никак не связаны между собой «мир» в слове «мирный» и «мир» в «вымирании».
Примеры слов с корнями «мер», «мир»
В этом блоке я приведу вразброс несколько слов с «мер» и «мир», а вы прочитайте их вслух и потренируйтесь объяснять правописание в каждом примере.
- Как вы думаете, почему вымерли динозавры?
- Эта ящерица замирает, чтобы вы ее не заметили и не поймали.
- Отмершие листья падают на землю.
- В этой игре каждый ребенок должен замереть на счет «три» и не двигаться.
- Иногда птицы в лесу как будто замирают на мгновение и воцаряется полная тишина.
Дополнительные материалы и полезные ссылки
Мы приближаемся к заключению и пробил час полезных материалов.
Если вам нужен хороший учебник по русскому, рекомендую этот – «Русский язык. Теория. 5-9 класс». В нем нет практики, только теория. Обратите внимание, с пятого по девятый класс. То есть в одной книжке собраны все правила русского языка, которые вам надо знать. И вообще вся теория, которую изучают дети за это время.
Если вы готовитесь к ЕГЭ и ищете для этого хорошие учебные пособия, то рекомендую вам скачать небольшой архив с четырьмя пособиями по русскому. Как раз для выпускников, которые готовятся к экзаменам. Пособия электронные, архив бесплатный. Для скачивания пришлите через эту страницу ваш электронный адрес, я вам на него перешлю архив. На вирусы я все проверял лично, документы чистые.
Если не можете заставить себя работать с упражнениями и не знаете, как еще закрепить свои знания, поищите в интернете онлайн-тренажеры по русскому. Я вам могу посоветовать бесплатные программы, которые были выпущены на сайте Викиум. Ссылка, которую я дал, перенаправит вас на общую страницу с тренажерами, прокрутите до серединки, и увидите там блок «Способность к работе с текстом» – это как раз то, что нужно. Эти тренажеры простые и при этом очень интересные, на них легко практиковаться.
Пробегитесь глазками по вот этим моим статьям, если вы часто делаете ошибки в письменных работах:
- Как быстро научиться писать грамотно. Когда прочитаете, обязательно выполните упражнение, в котором надо описать вид из окна. Оно простое и при этом действенное.
- Орфограмма – что это такое. Как раз о словах с пропущенными буквами. В этой статье вы найдете правильную схему их пошагового объяснения. Если будете следовать схеме – быстро повысите грамотность.
- Курсы по русскому языку. Я собрал в статье самые популярные курсы по русскому. Там много недорогих материалов, групповых интенсивов.
Еще у меня недавно вышли статьи про два других корня с чередованием: лож/лаг и бер/бир – в них тоже для объяснения надо смотреть на суффикс «а», поэтому вы эти темы сможете усвоить очень легко и быстро.
Последняя «полезность» – мои ролики по русскому. Они на ютубе в бесплатном доступе. Вот пример одного из видео, другие найдете сами по плейлистам.
Заключение
Уважаемые читатели, понятно ли вам, как правильно объяснять слова с корнями «мер» и «мир»? Сможете ли вы теперь правильно объяснять эту орфограмму в тетради и у доски?
Если остались какие-то вопросы – обязательно пишите их в комментариях. Я просматриваю комментарии в течение суток и всегда отвечаю.
( 1 оценка, среднее 5 из 5 )
Оцените статью
ЕЖЕНЕДЕЛЬНАЯ РАССЫЛКА
Получайте самые интересные статьи по почте и подписывайтесь на наши социальные сети
ПОДПИСАТЬСЯ
Ищешь, что значит слово шпора? Пытаешься разобраться, что такое шпора? Вот ответ на твой вопрос:
Значение слова «шпора» в словарях русского языка
Шпора это:
шпора может означать:
Википедия
Шпора
I ж.
1.Металлический стержень на дужке с зубчатым или гладким колесиком, прикрепляемый к заднику сапога всадника и служащий для управления лошадью.
2.Роговой заостренный вырост на конечностях некоторых птиц, обычно самцов, служащий орудием защиты и нападения.
3.Специальный выступ, шип на ободе ведущего колеса трактора или на звеньях гусеницы для лучшего сцепления с грунтом. II ж. разг.Листок бумаги с записями, которым учащийся пользуется тайно от преподавателя; шпаргалка.
Большой современный толковый словарь русского языка
Шпора
ж.
1) Металлический стержень на дужке с зубчатым или гладким колесиком, прикрепляемый к заднику сапога всадника и служащий для управления лошадью.
2) а) Острый выступ на чем-л. б) Роговой заостренный вырост на конечностях некоторых птиц, обычно самцов, служащий орудием защиты и нападения. в) Специальный выступ, шип на ободе ведущего колеса трактора или на звеньях гусеницы для лучшего сцепления с грунтом.
Новый толково-словообразовательный словарь русского языка Ефремовой
Шпора
жен. шпоры мн. бодец, бодцы конника, острога южн. , зап. пристегнутые к сапогам торчки, шпеньки, с зубчатыми кружками, для побужденья под собою коня. Шпоры чистить, о лигавой, не искать, не рыскать, ходить по пятам за охотником. | Шпоры у петуха, бодцы. | Шпора цветка, трубчатая закорючка лепестка. Шпорные, -ровые пряжки. Шпорать лошадь, побуждать бодцами. Шпоренье, действие по глаг. Шпорник, работающий шпоры. | Растен., Delphinium.
Словарь Даля
Шпора
выступ на ободе колеса или на звене гусеницы N2 Spec шпора прикрепляемая к заднику сапога стальная дужка с колесиком на конце, служащая всаднику для понукания лошади Дать шпоры коню (нажать шпорами на его бока). шпора роговой шип на ногах у некоторых птиц Петушиные шпоры.
Словарь русского языка Ожегова
Шпора
в биологии -..
1) у птиц — роговой шип на конечностях, служащий для нападения и защиты…
2) У клоачных млекопитающих — роговое образование на задних ногах; имеет проток шпорцевой железы, выделяющей ядовитый секрет. — (от нем. Sporn), изогнутая по форме каблука металлическая дужка со стержнем (острым или снабженным колесиком); прикрепляется к сапогу всадника и служит для управления конем.
Современный толковый словарь, БСЭ
Шпора
шпора ж.
1) Металлический стержень на дужке с зубчатым или гладким колесиком, прикрепляемый к заднику сапога всадника и служащий для управления лошадью.
2) а) Острый выступ на чем-л. б) Роговой заостренный вырост на конечностях некоторых птиц, обычно самцов, служащий орудием защиты и нападения. в) Специальный выступ, шип на ободе ведущего колеса трактора или на звеньях гусеницы для лучшего сцепления с грунтом.
Толковый словарь Ефремовой
Шпора
шпоры, ж. (нем. Sporn).
1. Металлический стержень с зубчатым или гладким колесиком на конце, прикрепляемый к заднику сапога всадника и служащий для понуждения лошади. Дать шпору коню (нажать шпорами). Звон шпор. Щелкнул шпорами и брякнул колечками сабли. Тургенев.
2. Роговой заостренный вырост на ногах у нек-рых птиц, преимущ. самцов, служащий обычно орудием драки. Шпоры у петухов.
3. То же, что шпорца (зоол.).
Толковый словарь русского языка Ушакова
Шпора
шпора, -ы
Полный орфографический словарь русского языка
Шпора
металлический стержень на дужке с зубчатым или гладким колёсиком, прикрепляемый к заднику сапога всадника и служащий для управления лошадью роговой заострённый вырост на конечностях некоторых птиц, обычно самцов, служащий орудием защиты и нападения ; роговой вырост на сгибе крыла у некоторых птиц специальный выступ, шип на ободе ведущего колеса трактора или на звеньях гусеницы для лучшего сцепления с грунтом
Викисловарь
Шпора
, ; листок бумаги с записями или иной носитель информации, которым учащийся пользуется тайно от преподавателя
Викисловарь
Шпора
шпора (аналог. русск. шпора I.
1) шпора (аналог. русск. шпора I.
2)
Викисловарь
Шпора
шпора (аналог. русск. шпора I.
1) шпора (аналог. русск. шпора I.
2)
Викисловарь
Где и как употребляется слово «шпора»?
Кроме значения слова «шпора» в словарях, рекомендуем также ознакомиться с примерами предложений и цитат из классической литературы, в которых употребляется слово «шпора».
Так вы сможете гораздо легче понять и запомнить, как правильно употребляется слово «шпора» в тексте и устной речи.
Примеры употребления слова «шпора»
Затем, вежливо приподняв шляпу, дал шпоры коню и снова понёсся по прерии.
Рыцарь установил копьё вертикально, закрепил его за крюк, легонько кольнул шпорой коня, направляя его к священнику.
Рыцарский пояс на талии и рыцарские золотые шпоры, поблёскивавшие на замшевых сапогах, без слов говорили о его высоком положении.
Синонимы, антонимы и гипонимы к слову «шпора»
Синонимы к слову «шпора»:
- выступ
- дужка
- полузапруда
- шип
- шпорца
- острога
Гиперонимы к слову «шпора»:
- приспособление
- вырост
- вырост
- приспособление
- приспособление
Разбор слова «шпора»
Для многих людей главная трудность в русском языке — употребление слов «в течении» или «в течение», правила их написания и особенности выбора окончаний.
Отдельная сложность касается элемента «в» и его правописания — «в течение» или «в течении». В зависимости от ситуации окончание может быть любым — «ие» или «ее», а вот предлог «в» всегда пишется отдельно.
Что значит «в течение»
Сложность употребления предлога «в течение» состоит в том, что он утратил самостоятельность и применяется в предложениях с разной смысловой нагрузкой.
Характерные примеры:
- В течение дня. Предложение показывает, что какое-то событие происходит на протяжении суток или в определенный момент периода.
- В течение недели. Работает аналогичный принцип.
- В течение долгого времени. При выборе варианта упор на конкретный временной промежуток не делается. Концентрируется внимание на действии в определенное время.
Аналогичный подход применяется при использовании иных временных промежутков — в течение 24 часов, суток, месяца, года, зимы, осени и т. д.
Указанный предлог применяется в паре с существительным и стоит в родительном падеже. К таким выражениям легко задать вопрос «Как долго?».
Если говорить о написании слитно или раздельно, «в течение» всегда пишется двумя словами. Это правило необходимо запомнить.
Что значит «в течении»
Словосочетание «в течении» не является предлогом в комплексе. Оно состоит из двух элементов — предлога «в» и существительного «течении». Зная такую особенность, путаницы в написании быть не должно.
“Увидели” или “увидили” – в каком варианте слова ошибка? Ответ смотрите в следующей статье нашего сайта.
Примеры использования правила
Для закрепления темы рассмотрим, как пишется слово «в течении» и «в течение».
Окончание «ие»:
- «Он почти без сна работал в течение месяца, поэтому заслужил отдых и поездку на морское побережье».
- «Илья работал в течение суток над трудной задачей и успешно справился с ее решением».
- «Маша пообещала прийти в течение получаса и сделать прическу для свадебной церемонии».
- «Я ждал этого момента в течение полугода и был счастлив после принятия положительного решения».
Для сравнения приведем предложения с ошибками:
- В течении всей жизни я шел к мечте».
- В течении длительного времени и долгого жизненного этапа я гнался за призрачной мечтой»
- «Антон пообещал сделать заказ в течении двух дней».
- «Почтальон пожаловался, что в течении лета этого и прошлого года совсем не пишутся письма».
В этих случаях должно использоваться окончание «ие», а не «ии».
Окончание «ии»:
- «В течении горной речки скрывается много тайн и богатая история».
- «Брошенный лист бумаги закрутился в течении воды и стал быстро уплывать от берега».
- «Родители попросили меня быть осторожнее, ведь в течении такой силы легко утонуть».
В рассмотренных выше предложениях указание «ие» в окончании недопустимо.
Итоги
Выше мы определились, что часть речи «в течение» — предлог, употребляемый с «ие» в конце. Он отвечает на вопрос «Как долго?» и показывает продолжительность какого-либо действия. Словосочетание «в течении» состоит из предлога «в» и существительного «течении».
В течении или в течение?
Нередко при письме даже у вполне грамотных людей возникает сомнение: а как правильно написать – «в течение» или «в течении»? И тут их может ждать сюрприз: правила русской орфографии уверяют, что оба варианта – правильные!
Но это не значит, что написание в каждом конкретном случае зависит от настроения или желания. Решающим фактором правильного окончания тут становится часть речи. Определяем, в какой роли выступает «в течение/и»: то ли это предлог и существительное, то ли отыменный производный предлог. Звучит сложно, на деле же ничего трудного, нужно только запомнить несколько простых тезисов.
Правописание предлога В ТЕЧЕНИЕ
Да, окончание «Е» даёт основание полагать, что это служебная часть речи, а именно предлог. Рассмотрим же правило правописания «в течение» и поймём, в каких случаях этот предлог используется.
Главное здесь – запомнить, что если имеется в виду временной отрезок, то пишется окончание «Е». Спросим себя: «Можно тут задать вопрос «за какое время? Долго ли? ». Если да, то смело решаем – это предлог, а значит, напишем «Е» в конце.
Правило написания В ТЕЧЕНИЕ
Можно добавить и такую памятку: если в сочетании «в течение» оба слова пишутся вместе (не слитно, а рядом), то есть между «в» и «течение» невозможно вставить зависимого слова, то и этот момент указывает нам на то, что это предлог.
Кроме того, за отыменным предлогом непременно стоит существительное в форме родительного падежа, которое всегда означает какой-то промежуток времени: «в течение минуты, часа, столетия, дня, семестра». Это может быть и сезон: например, «в течение лета, зимы, осени».
То есть если «в течение» можно заменить предлогом, который означает время, а смысл фразы не изменится, то и «в течение» — тоже предлог.
Примеры использования правила
- Иван Иваныч устал, так как в течение трёх суток (ЗА трое суток) не выспался ни разу.
- Муха билась о стекло в течение часа, но (ЗА час) так и не нашла открытую форточку.
- Дискуссия длилась в течение целого рабочего дня, и, наконец, спорщики (во время целого дня) пришли к единому мнению.
Правописание слова В ТЕЧЕНИИ
«В течении» с окончанием «И» — это существительное «течение» в предложном падеже с предлогом «в». Здесь тоже ничего сложного. Зададим себе вопрос: «Можно в данном предложении спросить «Где?» или «В чем?». Например, «в течении реки». Если можно, то в этом случае мы понимаем, что это именно существительное с предлогом и пишем окончание «И».
Правило написания В ТЕЧЕНИИ
Можно также проверить себя, попробовав вставить между предлогом и существительным определение. Например, «в стремительном течении реки» или «в неспокойном течении времени».
Кроме того, существительное «течение» обычно ассоциируется с водой или рекой, и, как правило, именно с этими словами и употребляется чаще всего. Реже – со временем, которое тоже нередко метафорически сравнивают с потоком воды.
Примеры использования правила
- В (мутном) течении селевого потока то и дело мелькали огромные валуны.
- В (стремительном) течении горной речки купаться крайне опасно.
- Мальчишки с восторгом бултыхались в (неспешном) течении широкой реки.
Заключение
Мы разобрались, в каких случаях пишется окончание «Е» или «И»: в производном предлоге – «Е», в предлоге с существительным – «И». Проще говоря, если речь идёт о времени в его прямом значении и если между «в» и «течением» нельзя вставить слова, значит, пишем «в течениЕ». Если же речь о воде и если можно вставить определение этой самой воды, то пишем «в течениИ».
В течение или в течении: как правильно писать?
В течение дня или в течении? В течении реки или в течение? На эти вопросы я уже мимоходом отвечал. Теперь настало время объяснить разницу между «в течение» и «в течении» уже в отдельной статье. Что я и сделаю сейчас.
Что значит «в течение»?
Этот предлог означает «во время чего-либо», «в ходе чего-либо», «в продолжение».
Определение из толкового словаря:
- Употребляется при указании на временной отрезок, событие или действие, на всём протяжении которых происходит что-либо, и соответствует по значению сл.: на протяжении чего-либо, в продолжение чего-либо.
- Употребляется при указании на временной отрезок, в один из моментов которого совершается действие.
Поэтому правильными будут следующие варианты и примеры.
- В течение дня. В течение часа. В течение нескольких секунд. В течение трёх дней. В течение недели. В течение 2020 года.
- В течение всей поездки. В течение всего игрового процесса.
- Доставка товара (грузов) в течение суток (дня, часа, недели).
- В течение дня все чувствовали себя прекрасно.
- Средства будут зачислены на ваш счёт в течение 5 дней.
- Выполнить задание нужно в течение семи рабочих дней.
- В течение часа вам перезвонят.
- Вернуть товар можно в течение 14 дней.
- Здесь нужно сообразить в течение нескольких секунд.
- В течение какого времени нужно оплатить покупку?
Какой вывод? Если мы говорим о любом временном отрезке или действии, которое разворачивается во времени, то пишем «в течениЕ». По смыслу можно заменить на «во время», «за», «на протяжении», «в процессе», «при», «в ходе». Не все эти предлоги одновременно подходят, только в зависимости от контекста.
В течение всей лекции студенты спали = Во время всей лекции студенты спали.В течение часа я написал текст = За час я написал текст.
Что значит «в течении»?
Это обычная предложно-падежная форма существительного «течение». Оно здесь употребляется в прямом значении. Падеж — предложный. Пишем «в течении» тогда, когда говорим о водном потоке:
В течении реки. В течении моря. В течении океана.
Второе значение слова «течение» — направление в какой-либо области деятельности.
Политические, общественные, религиозные течения. Новое течение в литературе. Старое музыкальное течение. Одно из научных течений.
В этом течении искусства мы наблюдаем следующие черты.
Таким образом, если мы говорим о движении какого-либо водного источника (реки, океана и т. д.), тогда пишем «в течении». Или о направлении в искусстве, литературе и др.
Конечно же, фразы вроде «в течении недели» ошибочны, поскольку мы говорим о временном промежутке, а не водном потоке. А для него нужна только одна конструкция — в течениЕ.
В течение недели, но в (тёплом) течении реки
Итак, «в течение» и «в течении» — это разные конструкции, которые легко отличить друг от друга, если понимать значение того, о чём мы пишем.
Если речь идёт о любом временном промежутке, то нам нужен предлог «в течение». А существительное «в течении» нам понадобится только тогда, когда мы говорим о реке, океане или о чём-нибудь другом, что связано с водой. И когда рассказываем о направлении в какой-либо области деятельности (политике, искусстве, литературе и т. п.).
Напоследок краткая шпаргалка. Если между предлогом «в» и существительным «течении» можно поставить какое-нибудь прилагательное, то будет писаться «в течении»: в (холодном) течении реки, в (бурном) течении реки, в (медленном и тёплом) течении океана.
В течение или в течении (года, месяца, недели, дня)?
Производный отымённый предлог «в течение» (года, месяца, недели, часа) пишется с окончанием -е. Существительное в форме предложного падежа «в течении» (реки) пишется с окончанием -и.
В письменной речи может доставить затруднение написание одинаково звучащих слов, принадлежащих к разным частям речи. Выясним, в каких случаях правильно пишется «в течениИ» или «в течениЕ».
Правописание слова «в течении»
Чтобы определить, как правильно «в течениЕ» или «в течениИ», воспользуемся конкретным контекстом. После весеннего паводка в течении быстрого ручья заметны изменения.
Заметны (в чём?) в течении. Слово «в течении» обозначает предмет. К нему от сказуемого задается вопрос.
Эти грамматические признаки помогут понять, что эта лексема является падежной формой существительного «течение», которое обозначает направление потока воды, например, от истока к устью.
Рассматриваемая словоформа обладает самостоятельным лексическим значением и является полноправным членом предложения.
Существительное среднего рода единственного числа «течение» изменяется по падежам:
- и.п. (что?) течение
- р.п. быстрота (чего?) течения
- д.п. иду (по чему?) по течению
- в.п. войду во что? в течение
- т.п. наслаждаюсь чем? течением
- п.п. нахожусь в чём? в течении
Отметим, что это слово с конечным буквосочетанием -ие, отличается окончанием -и в форме предложного падежа от обычных имен существительных среднего рода второго склонения:
- окно — в окне;
- крыльцо — на крыльце;
- поле — в поле.
Понаблюдав за изменением интересующего нас слова, подытожим:
- Существительное в форме предложного падежа единственного числа «в течении» пишется с окончанием -и.
- Эту словоформу существительного научимся отличать от производного отымённого предлога.
Написание предлога «в течение»
Орфографическую трудность вызывает правописание предлога, который часто путают с омонимичной формой существительного в предложном падеже + первообразный предлог «в» — «в течении».
От формы винительного падежа «в течение» образуется производный предлог, который утерял общее грамматическое значение предметности и конкретное лексическое значение существительного. Этот предлог обозначает промежуток времени и синонимичен словам «на протяжении чего-либо». Он и служит только для связи слов в предложении.
Сравним:
- В течении Лены незаметны глубокие омуты.
- В течение всей дороги Касьян сохранял упорное молчание (И. Тургенев).
- Незаметны (где?) в течении.
Эта словоформа предложного падежа существительного (в чём? в течении) обозначает предмет. Течение реки можно увидеть глазами и ощутить его, если зайти в воду или плыть в лодке. Это слово обладает лексическим значением и является полноправным членом предложения — обстоятельством места.
- Сохранял молчание (когда?) в течение всей дороги.
Предлог «в течение» не является самостоятельным членом предложения. Он обозначает временной промежуток (абстракцию) и принадлежит обстоятельству, выраженному словосочетанием.
Отымённый предлог употребляется всегда в паре с существительным в форме родительного падежа и выражает временные отношения (как долго?), например:
- в течение часа;
- в течение суток;
- в течение месяца;
- в течение года;
- в течение дня;
- в течение недели;
- в течение времени;
- в течение лета (зимы, осени, весны).
В течение многих часов можно сидеть на берегу и наблюдать, как играет море.
Производный отымённый предлог «в течение» (форма винительного падежа существительного) пишется с окончанием -е.
Правописание «в течение» и «в течении»: когда как писать, примеры и объяснение
В заголовке правильное и то, и другое выражение: и «в течение», и «в течении».
Какое из них будет верным на письме, определяется не какими-либо формальными правилами, но контекстом (общим смыслом) высказывания, в которое оно входит. Попросту – что вы хотите этим сказать.
Сложность в том, что «в течение» в одном контексте фигурирует как эквивалент части речи (см. ниже), причём самостоятельной части речи того же значения нет.
А в другом контексте то же самое «в течение» будет уже комбинацией из двух частей речи, связанных между собою синтаксически (по правилам правописания) и семантически (по смыслу). Поэтому, чтобы правильно, когда следует, писать «в течение» или «в течении», нужно предварительно оформить в уме мысль, которую вы намерены выказать.
Тем не менее, скажем сразу, что популярный предлог «в течение» какого-либо времени пишется c «е» на конце как устойчивое словосочетание.
Итак, выражение «в течение» в русском языке имеет два различных значения, т.е. является как бы омонимом самому себе:
- Устойчивого словосочетания (фразеологизма), играющего роль предлога при винительном или, реже, именительном падеже слова «течение» (а не при родительном, как вопреки всей и всяческой русской орфографии утверждает Викисловарь) – употребляется чаще всего.
- Обычного словосочетания, употребляемого согласно смыслу фразы, где слово «течение» ставится в те же падежи – употребляется изредка.
«В течение» как самостоятельный предлог
«В течение» в качестве предлога употребляется, когда нужно указать, что действие (явление, процесс) происходит на продолжении определённого промежутка времени. Т.е., если важно (нужно, желательно) высказать, что здесь имеет значение не только само действие, но и время, за которое оно совершалось; обычно таким образом выделяется время протекания наиболее существенной (значимой) части действия:
- «Средства на счёт получателя зачисляются в течение часа»;
- «Клиент имеет право оспорить принудительное списание со счёта (штраф, пеню, и т.д.) в течение трех дней»;
- «Постараюсь выбраться к вам в течение дня»;
- «В течение лекции студенты соблюдали академический этикет» (правила поведения).
Синонимы в таком контексте «в продолжение», «на продолжении»; частичные «в ходе» (преимущественно в обиходной речи – «в ходе дня»; «в ходе лекции»); «в диапазоне», «в период», «в промежутке» (все для времени от сих до сих, т.е. точно указанного).
Время или процесс?
«Время важности» события не обязательно выделяется некими временны́ми отметками, но, возможно, определяется самим ходом процесса:
- «В течение некоторого времени по окончании совещания собравшиеся не расходились, обсуждая детали»;
- «Уже в течение рассказа слушатели поняли, каков будет его финал».
Набор синонимов в данном случае сокращается до «в продолжение». Меняется и частичный обиходный синоним на «по ходу» («по ходу рассказа»).
«В течение» как существительное «течение» с предлогом «в»
Как сказано выше, словосочетание «в течение» может быть и простым, не устойчивым, т.е. не существующим в речи самостоятельно и не наделённым своим собственным значением.
То есть, существительное «течение» в винительном или именительном падеже может употребляться с предлогом «в», если имеется в виду не отрезок времени действия, но собственно действующий субъект: поток газа или жидкости, ход событий.
В этом контексте «в течение» употребляется преимущественно в специальных областях:
- «В течение исходящих газов были введены цветовые маркеры, что позволило проследить развитие турбулентности в их струе»;
- «Выпущенные в течение Гольфстрима буи уже более ста лет тому назад выявили его волнообразные колебания, но их природа остаётся неясной до сих пор».
Поскольку «в течение» в таком контексте не фразеологизм, то на письме между предлогом и соотносящимся с ним существительным при необходимости вставляются дополнительные члены предложения (определения, обстоятельства, дополнения):
- «Нерестящиеся над каменистым дном рыбы стремятся войти в наиболее интенсивное течение и встать к нему головой – так икра шире рассеивается и быстрее прячется под камнями». Тут прилагательное «интенсивное» является определением к обстоятельству «в течение», а наречие «наиболее» – дополнением к определению.
Синонимами к «в течение» в данном контексте будут «поток», «ток»; частичными «струя», «стрежень».
Говоря попросту
В повседневной речи «в течение» как существительное с предлогом употребляется более всего в косвенном, иносказательном смысле, а под «течением» подразумевается ход событий, процесса или явления:
- «Позабыв про всё на свете, мы с ходу ринулись в течение необоримой страсти»;
- «В течение рекламной кампании нужно срочно вводить коррективы, иначе новинка рискует провалиться на рынке».
Здесь между «в» и «течение» также могут вклиниваться дополнительные части предложения:
«Прошло время, и в устоявшееся течение наших отношений вошла новая жизнь». Тут «устоявшееся» – определение к дополнению «в течение» (дополняет другое дополнение – «отношений» – с определением «наших»). Обстоятельство в этом предложении «время» с дополнением «прошло»; подлежащее «жизнь» с определением «новая»; сказуемое «вошла».
Синоним к иносказательному «течение» (с предлогом «в») «ход». Частичные «порядок», «построение», «регламент» (для мероприятий). Частичные для бурных, стремительных и/или беспорядочных процессов и явлений «вихрь», «водоворот», «водопад», «поток», «смерч».
«В течении» – тоже существительное с предлогом
Выражение «в течении» пишется взамен «в течение» как существительного с предлогом, если по контексту слово «течение» нужно поставить в предложный падеж:
- «Купаться запрещено! В течении реки замечены водовороты!».
Синонимы те же, что и к «в течение» в смысле потока вещества: «поток», «ток»; частичные «струя», «стрежень».
- «В течении глобальных финансовых потоков в последние годы наблюдаются явные признаки застоя»;
- «После первых буйных порывов в течении наших встреч наметились сдвиги к некоторому плотскому охлаждению, но привязанности друг к дружке мы не потеряли».
Синонимы – аналогично к «в течение» иносказательному, но в сокращённом наборе: полный «ход»; частичные «вариации», «движение», «порядок» (для производственно-экономических процессов). Частичные «ток», «характер».
Грамматика
Слово «течение» – неодушевлённое имя существительное среднего рода 2-го склонения. Состоит из корня «теч-», суффиксов «-ен-», «-и-» и окончания «-е». Постановка ударения и разделение переносами те-че́-ние. Падежные формы:
- Именительный: тече́ние (ед. ч.); тече́ния (мн. ч.).
- Родительный: тече́ния (ед. ч.); тече́ний (мн. ч.).
- Дательный: тече́нию у (ед. ч.); тече́ниям (мн. ч.).
- Винительный тече́ние (ед. ч.); тече́ния (мн. ч.).
- Творительный: тече́нием (ед. ч.); тече́ниями (мн. ч.).
- Предложный: тече́нии (ед. ч.); тече́ниях (мн. ч.).
Значение
Помимо описанных выше значений существительного «течение» (поток текучего вещества, ход событий, процесса или явления) это слово обозначает также обособленное подразделение (подвид) деятельности определённого направления.
Употребляется преимущественно применительно к архитектуре, искусству и литературе (например, ар деко, минимализм и хайтек это течения архитектурного стиля модерн; кубизм и ташизм – течения абстракционизма в живописи).
Реже – к явлениям культурным, общественным и религиозным: битники и панки это течения агрессивной субкультуры; феминизм – течение в суфражизме (борьбе женщин за равные с мужчинами права); толстовство – течение в православной ереси.
В научно-техническом обиходе слово «течение» в данном значении не употребляется, так как в этих сферах деятельности личное мнение и пожелание не имеют значения, а гипотезы и предположения должны быть доказаны наблюдениями, экспериментами и успешной работой действующих изделий.
Втечение или в течение? Слитно или раздельно?
Для начала разберемся со слитным и раздельным написание слова «в течение». Первое, что мы сделаем, это определимся с тем, какой частью речи оно является.
Конструкция «В течение» можем являться:
- Предлогом. Пример: «Он хорошо учился в течение всего года.»
- Сочетанием предлога «в» и существительного «течение». Например: «В течение реки попали сточные воды.»
Как мы можем видеть, слитного сочетания «втечение» ни в том, ни в другом случае нет.
Писать СЛИТНО «ВТЕЧЕНИЕ» или «ВТЕЧЕНИИ» НЕПРАВИЛЬНО!
Осталось разобраться с буквой «е» или «и» на конце. Как мы будем писать «в течение» или «в течении»? Тут всё не так однозначно, как со слитным и раздельным написанием.
В случае, когда «в течение» у нас предлог, мы всегда пишем «е» на конце!
Когда мы имеем предлог «в» и существительное «течение», то возможно, как «е», так и «и» на конце.
Важно понимать, что «в течение» в большинстве случаев является именно предлогом, за исключением тех случаев, где «течение» в предложении является самостоятельным существительным и употребляется в буквальном смысле. Проще всего это понять на примерах. Рассмотрим несколько.
- В течение часа нужно выполнить эту работу. (предлог)
- Вова готовился к экзаменам в течение всего дня. (предлог)
- Наша лодка неслась в течении этого огромного потока воды. (предлог и сущ.)
- Грязная вода попала в течение. (предлог и сущ.)
- В течении реки последние несколько лет наблюдаются изменения. (предлог и сущ.)
В первых 2-х примерах мы имеем предлог. По смыслу он означает — на протяжении некоторого времени. Мы всегда пишем «е» на конце! В оставшихся 3-х у нас существительное «течение» с предлогом «в». «Е» или «и» в конце зависит от падежа.
В чем? – В течении – Предложный падеж.
Во что? – В течение – Винительный падеж.
Вот собственно и всё. Основное, что важно и нужно запомнить:
«В ТЕЧЕНИЕ» ВСЕГДА пишется РАЗДЕЛЬНО!
Е или И на конце определить уже проще. Е мы пишем почти всегда, кроме случае когда мы имеем дело с существительным в предложном падеже: «в чем? – в течении».
Чтобы запомнить правильное написание надолго, рекомендуем запомнить простую фразу:
В течение часа, но в течении реки, и всегда раздельно!
Также рекомендуем запомнить данную картинку:
Если у вас остались какие-то вопросы по тому, как пишется «в течении», слитно или раздельно, с «е» или с «и» на конце обязательно напишите их в х.
Как пишется В течение – объясняю правило понятным языком, чтобы вы легко запомнили
Всегда раздельно. Если речь о «течении» (воды, болезни, какого-то процесса) – пишем с «и», если можно заменить на «во время» – пишем с «е».
Слово «В течение» всегда пишется раздельно. Но иногда на конце надо писать «и», а иногда – «е». «И» надо писать тогда, когда речь о реальном «течении». Если же вы хотите сказать «во время чего-либо», то надо писать «е».
Пишем «И», если речь о реальном течении
Поясняю сразу на трех примерах:
- В течении воды в реке геологи увидели изменения.
- Я заметил странности в течении ее заболевания.
- В течении этого процесса есть что-то необычное.
В школе эту орфограмму надо объяснять так. «И» пишется потому, что «течение» – существительное на -ие (подробнее об этом – в статье про склонение существительных) и стоит оно в предложном падеже. А у существительных на -ие в предложном падеже всегда окончание «и».
Если путаете последовательность падежей и не знаете, какие вопросы к какому падежу надо задавать – читайте мою статью о косвенных падежах. Я там даю простые запоминалочки, которые помогают быстро все запомнить. Или смотрите мое видео по этой теме.
В остальных случаях пишем «е»
Если вы НЕ хотите сказать про реальное течение, то «в течение» надо писать с буквой «е». В этом случае оно будет иметь значение «во время». Поясняю на примерах:
- В течение семестра я набрал много баллов = Во время семестра я набрал много баллов. То есть пока семестр длился, я учился хорошо.
- Я вам перезвоню в течение дня = Я вам перезвоню во время дня. То есть до конца дня я точно сделаю звонок.
- Ответ придет в течение недели = «В недельное время» ответ придет. То есть до конца недели мы точно получим ответ.
В школе про это слово надо говорить следующее. «В течение» – это предлог. Чтобы доказать, что это предлог, надо употребить его в вопросе к существительному:
- Я набрал много баллов (в течение чего?) в течение семестра.
- Я позвоню (в течение чего?) в течение дня.
- Ответ придет (в течение чего?) в течение недели.
Поскольку это предлог, мы его не склоняем как существительное. Мы с ним вообще ничего не делаем. Он «застыл» в одной форме – «в течение». И надо запомнить, что у него на конце всегда «е».
Как еще можно себя проверить, чтобы не ошибиться
Еще один вариант проверки. Если между «в» и «течение» можно поставить другое слово, значит «течение» – существительное и у него на конце надо писать «и»:
- В быстром течении реки.
- В странном течении болезни.
- В необычном течении этого процесса.
А вот если слово никакое поставить нельзя, значит «в течение» – предлог. Он пишется с «е» на конце. «Я отправлю письмо в течение недели» – никакое слово вы после «в» не поставите. Нельзя сказать «Я отправлю письмо в быстром течении недели». Да и незачем это делать.
Полезные материалы по теме
Обязательно посмотрите мое видео о том, как работать с орфограммами – оно поможет вам правильно объяснять орфограмму и в слове «в течение» и во многих других словах с пропущенными буквами.