Ещё немного ссылок: таблицы
До сих пор мы описывали основные навигационные ссылки.
Некоторые типы DOM-элементов предоставляют для удобства дополнительные свойства, специфичные для их типа.
Таблицы – отличный пример таких элементов.
Элемент
-
-
-
-
-
-
-
-
P.S. Пример выше на картинке.
#браузер #документ #dom_навигация
До сих пор мы описывали основные навигационные ссылки.
Некоторые типы DOM-элементов предоставляют для удобства дополнительные свойства, специфичные для их типа.
Таблицы – отличный пример таких элементов.
Элемент
<table>
, в дополнение к свойствам, о которых речь шла выше, поддерживает следующие:-
table.rows
– коллекция строк <tr>
таблицы.-
table.caption/tHead/tFoot
– ссылки на элементы таблицы <caption>
, <thead>
, <tfoot>
.-
table.tBodies
– коллекция элементов таблицы <tbody>
(по спецификации их может быть больше одного).<thead>
, <tfoot>
, <tbody>
предоставляют свойство rows
:-
tbody.rows
– коллекция строк <tr>
секции.<tr>
:-
tr.cells
– коллекция <td>
и <th>
ячеек, находящихся внутри строки <tr>
.-
tr.sectionRowIndex
– номер строки <tr>
в текущей секции <thead>/<tbody>/<tfoot>
.-
tr.rowIndex
– номер строки <tr>
в таблице (включая все строки таблицы).<td>
and <th>
:-
td.cellIndex
– номер ячейки в строке <tr>
.P.S. Пример выше на картинке.
#браузер #документ #dom_навигация
👍14🔥3❤1
Итого по DOM навигации
Получив DOM-узел, мы можем перейти к его ближайшим соседям используя навигационные ссылки.
Есть два основных набора ссылок:
- Для всех узлов:
- Только для узлов-элементов:
Некоторые виды DOM-элементов, например таблицы, предоставляют дополнительные ссылки и коллекции для доступа к своему содержимому.
#браузер #документ #dom_навигация
Получив DOM-узел, мы можем перейти к его ближайшим соседям используя навигационные ссылки.
Есть два основных набора ссылок:
- Для всех узлов:
parentNode
, childNodes
, firstChild
, lastChild
, previousSibling
, nextSibling
.- Только для узлов-элементов:
parentElement
, children
, firstElementChild
, lastElementChild
, previousElementSibling
, nextElementSibling
.Некоторые виды DOM-элементов, например таблицы, предоставляют дополнительные ссылки и коллекции для доступа к своему содержимому.
#браузер #документ #dom_навигация
👍9🔥2❤1
document.getElementById или просто id
Если у элемента есть атрибут
Значение
Если в документе есть несколько элементов с одинаковым значением
Метод
#браузер #документ #поиск
Если у элемента есть атрибут
id
, то мы можем получить его вызовом document.getElementById(id)
, где бы он ни находился.Значение
id
должно быть уникальным. В документе может быть только один элемент с данным id
.Если в документе есть несколько элементов с одинаковым значением
id
, то поведение методов поиска непредсказуемо. Браузер может вернуть любой из них случайным образом. Поэтому, пожалуйста, придерживайтесь правила сохранения уникальности id
.Метод
getElementById
можно вызвать только для объекта document
. Он осуществляет поиск по id
по всему документу.#браузер #документ #поиск
👍23🔥6❤1
querySelectorAll
Самый универсальный метод поиска – это
Запрос на картинке получает все элементы
Этот метод действительно мощный, потому что можно использовать любой CSS-селектор.
#браузер #документ #поиск
Самый универсальный метод поиска – это
elem.querySelectorAll(css)
, он возвращает все элементы внутри elem
, удовлетворяющие данному CSS-селектору.Запрос на картинке получает все элементы
<li>
, которые являются последними потомками в <ul>
.Этот метод действительно мощный, потому что можно использовать любой CSS-селектор.
#браузер #документ #поиск
👍20🔥4❤2
querySelector
Метод
Иначе говоря, результат такой же, как при вызове
#браузер #документ #поиск
Метод
elem.querySelector(css)
возвращает первый элемент, соответствующий данному CSS-селектору.Иначе говоря, результат такой же, как при вызове
elem.querySelectorAll(css)[0]
, но он сначала найдёт все элементы, а потом возьмёт первый, в то время как elem.querySelector
найдёт только первый и остановится. Это быстрее, кроме того, его короче писать.#браузер #документ #поиск
👍14🔥4❤1
Топовые инструменты для работы с JavaScript!
Канал JavaScript инструменты будет регулярно знакомить тебя с инструментами для:
- сборки
- тестирования
- отладки
- безопасности
- аналитики
- оптимизации кода
- документирования
Можно почитать, пока компилируется проект 😉
Канал JavaScript инструменты будет регулярно знакомить тебя с инструментами для:
- сборки
- тестирования
- отладки
- безопасности
- аналитики
- оптимизации кода
- документирования
Можно почитать, пока компилируется проект 😉
👍6🔥3❤1
matches
Предыдущие методы искали по DOM.
Метод elem.matches(css) ничего не ищет, а проверяет, удовлетворяет ли
Этот метод удобен, когда мы перебираем элементы (например, в массиве или в чём-то подобном) и пытаемся выбрать те из них, которые нас интересуют.
#браузер #документ #поиск
Предыдущие методы искали по DOM.
Метод elem.matches(css) ничего не ищет, а проверяет, удовлетворяет ли
elem
CSS-селектору, и возвращает true
или false
.Этот метод удобен, когда мы перебираем элементы (например, в массиве или в чём-то подобном) и пытаемся выбрать те из них, которые нас интересуют.
#браузер #документ #поиск
🔥12👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Прокачивай навыки JavaScript решая практические тесты!
На канале JavaScript тесты каждый день выходят викторины на знание особенностей языка.
Также у вас будет возможность обсудить любые вопросы в нашем чате с другими участниками и авторами контента.
Подойдёт начинающим и уже более уверенным JS разработчикам!
Можно пощёлкать, пока компилируется проект :)
Подпишись, чтобы не потерять 👇
#javascript #тесты
На канале JavaScript тесты каждый день выходят викторины на знание особенностей языка.
Также у вас будет возможность обсудить любые вопросы в нашем чате с другими участниками и авторами контента.
Подойдёт начинающим и уже более уверенным JS разработчикам!
Можно пощёлкать, пока компилируется проект :)
Подпишись, чтобы не потерять 👇
#javascript #тесты
👍7🔥2
closest
Предки элемента – родитель, родитель родителя, его родитель и так далее. Вместе они образуют цепочку иерархии от элемента до вершины.
Метод
Другими словами, метод
#браузер #документ #поиск
Предки элемента – родитель, родитель родителя, его родитель и так далее. Вместе они образуют цепочку иерархии от элемента до вершины.
Метод
elem.closest(css)
ищет ближайшего предка, который соответствует CSS-селектору. Сам элемент также включается в поиск.Другими словами, метод
closest
поднимается вверх от элемента и проверяет каждого из родителей. Если он соответствует селектору, поиск прекращается. Метод возвращает либо предка, либо null
, если такой элемент не найден.#браузер #документ #поиск
👍14🔥6
getElementsBy*
Существуют также другие методы поиска элементов по тегу, классу и так далее.
На данный момент, они скорее исторические, так как querySelector более чем эффективен.
Здесь мы рассмотрим их для полноты картины, также вы можете встретить их в старом коде.
elem.getElementsByTagName(tag) - ищет элементы с данным тегом и возвращает их коллекцию. Передав
elem.getElementsByClassName(className) - возвращает элементы, которые имеют данный CSS-класс.
document.getElementsByName(name) - возвращает элементы с заданным атрибутом
P.S. На картинке пример поиска всех
#браузер #документ #поиск
Существуют также другие методы поиска элементов по тегу, классу и так далее.
На данный момент, они скорее исторические, так как querySelector более чем эффективен.
Здесь мы рассмотрим их для полноты картины, также вы можете встретить их в старом коде.
elem.getElementsByTagName(tag) - ищет элементы с данным тегом и возвращает их коллекцию. Передав
"*"
вместо тега, можно получить всех потомков.elem.getElementsByClassName(className) - возвращает элементы, которые имеют данный CSS-класс.
document.getElementsByName(name) - возвращает элементы с заданным атрибутом
name
. Очень редко используется.P.S. На картинке пример поиска всех
input
в таблице.#браузер #документ #поиск
👍10🔥3
Живые коллекции
Все методы
В приведённом выше примере есть два скрипта.
- Первый создаёт ссылку на коллекцию
- Второй скрипт запускается после того, как браузер встречает ещё один
#браузер #документ #поиск
Все методы
"getElementsBy*"
возвращают живую коллекцию. Такие коллекции всегда отражают текущее состояние документа и автоматически обновляются при его изменении.В приведённом выше примере есть два скрипта.
- Первый создаёт ссылку на коллекцию
<div>
. На этот момент её длина равна 1
.- Второй скрипт запускается после того, как браузер встречает ещё один
<div>
, теперь её длина – 2
.#браузер #документ #поиск
👍13🔥10
Статические коллекции
querySelectorAll возвращает статическую коллекцию. Это похоже на фиксированный массив элементов.
Если мы будем использовать его в примере выше, то оба скрипта вернут длину коллекции, равную
Теперь мы легко видим разницу. Длина статической коллекции не изменилась после появления нового
#браузер #документ #поиск
querySelectorAll возвращает статическую коллекцию. Это похоже на фиксированный массив элементов.
Если мы будем использовать его в примере выше, то оба скрипта вернут длину коллекции, равную
1
.Теперь мы легко видим разницу. Длина статической коллекции не изменилась после появления нового
div
в документе, в отличие от живой коллекции.#браузер #документ #поиск
👍6🔥5❤3
Итого по поиску в DOM
Есть 6 основных методов поиска элементов в DOM (см. изображение выше).
Безусловно, наиболее часто используемыми в настоящее время являются методы querySelector и querySelectorAll, но и методы getElement(s)By* могут быть полезны в отдельных случаях, а также встречаются в старом коде.
Кроме того:
- Есть метод elem.matches(css), который проверяет, удовлетворяет ли элемент CSS-селектору.
- Метод elem.closest(css) ищет ближайшего по иерархии предка, соответствующему данному CSS-селектору. Сам элемент также включён в поиск.
И, напоследок, давайте упомянем ещё один метод, который проверяет наличие отношений между предком и потомком:
- elemA.contains(elemB) вернёт
#браузер #документ #поиск
Есть 6 основных методов поиска элементов в DOM (см. изображение выше).
Безусловно, наиболее часто используемыми в настоящее время являются методы querySelector и querySelectorAll, но и методы getElement(s)By* могут быть полезны в отдельных случаях, а также встречаются в старом коде.
Кроме того:
- Есть метод elem.matches(css), который проверяет, удовлетворяет ли элемент CSS-селектору.
- Метод elem.closest(css) ищет ближайшего по иерархии предка, соответствующему данному CSS-селектору. Сам элемент также включён в поиск.
И, напоследок, давайте упомянем ещё один метод, который проверяет наличие отношений между предком и потомком:
- elemA.contains(elemB) вернёт
true
, если elemB
находится внутри elemA
(elemB
потомок elemA
) или когда elemA==elemB
.#браузер #документ #поиск
👍13🔥4❤2
Классы DOM-узлов
У разных DOM-узлов могут быть разные свойства. Например, у узла, соответствующего тегу
Каждый DOM-узел принадлежит соответствующему встроенному классу.
Корнем иерархии является EventTarget, от него наследует Node и остальные DOM-узлы.
На рисунке выше изображены основные классы.
#браузер #документ #свойства_узлов
У разных DOM-узлов могут быть разные свойства. Например, у узла, соответствующего тегу
<a>
, есть свойства, связанные со ссылками, а у соответствующего тегу <input>
– свойства, связанные с полем ввода и т.д. Текстовые узлы отличаются от узлов-элементов. Но у них есть общие свойства и методы, потому что все классы DOM-узлов образуют единую иерархию.Каждый DOM-узел принадлежит соответствующему встроенному классу.
Корнем иерархии является EventTarget, от него наследует Node и остальные DOM-узлы.
На рисунке выше изображены основные классы.
#браузер #документ #свойства_узлов
👍8❤2🔥2
EventTarget – это корневой «абстрактный» класс. Объекты этого класса никогда не создаются. Он служит основой, благодаря которой все DOM-узлы поддерживают так называемые «события», о которых мы поговорим позже.
P.S. На картинке описание интерфейса на TypeScipt.
#браузер #документ #свойства_узлов
P.S. На картинке описание интерфейса на TypeScipt.
#браузер #документ #свойства_узлов
👍7🔥5❤3
Node – также является «абстрактным» классом, и служит основой для DOM-узлов. Он обеспечивает базовую функциональность:
#браузер #документ #свойства_узлов
parentNode
, nextSibling
, childNodes
и т.д. (это геттеры). Объекты класса Node
никогда не создаются. Но есть определённые классы узлов, которые наследуют от него: Text
– для текстовых узлов, Element
– для узлов-элементов и более экзотический Comment
– для узлов-комментариев.#браузер #документ #свойства_узлов
👍15🔥3❤2
Element – это базовый класс для DOM-элементов. Он обеспечивает навигацию на уровне элементов:
#браузер #документ #свойства_узлов
nextElementSibling
, children
и методы поиска: getElementsByTagName
, querySelector
. Браузер поддерживает не только HTML, но также XML и SVG. Класс Element служит базой для следующих классов: SVGElement
, XMLElement
и HTMLElement
.#браузер #документ #свойства_узлов
👍7❤4🔥4
HTMLElement – является базовым классом для всех остальных HTML-элементов.
От него наследуют конкретные элементы:
- HTMLInputElement – класс для тега
- HTMLBodyElement – класс для тега
- HTMLAnchorElement – класс для тега
…и т.д, каждому тегу соответствует свой класс, который предоставляет определённые свойства и методы.
#браузер #документ #свойства_узлов
От него наследуют конкретные элементы:
- HTMLInputElement – класс для тега
<input>
,- HTMLBodyElement – класс для тега
<body>
,- HTMLAnchorElement – класс для тега
<a>
,…и т.д, каждому тегу соответствует свой класс, который предоставляет определённые свойства и методы.
#браузер #документ #свойства_узлов
👍7❤4🔥3
Как узнать имя класса DOM-узла?
Есть 2 способа сделать это:
- вспомним, что обычно у объекта есть свойство
- мы можем просто привести его к
Например, для тега
#браузер #документ #свойства_узлов
Есть 2 способа сделать это:
- вспомним, что обычно у объекта есть свойство
constructor
. Оно ссылается на конструктор класса, и в свойстве constructor.name
содержится его имя- мы можем просто привести его к
строке
Например, для тега
<body>
JavaScript-класс HTMLBodyElement.#браузер #документ #свойства_узлов
👍10🔥3❤1
Наследование классов DOM-узлов
Проверить наследование можно также при помощи
Как видно, DOM-узлы – это обычные JavaScript объекты. Для наследования они используют классы, основанные на прототипах.
В этом легко убедиться, если вывести в консоли браузера любой элемент через
#браузер #документ #свойства_узлов
Проверить наследование можно также при помощи
instanceof
.Как видно, DOM-узлы – это обычные JavaScript объекты. Для наследования они используют классы, основанные на прототипах.
В этом легко убедиться, если вывести в консоли браузера любой элемент через
console.dir(elem)
. Или даже напрямую обратиться к методам, которые хранятся в HTMLElement.prototype
, Element.prototype
и т.д.#браузер #документ #свойства_узлов
👍5🔥4❤1