#3 Поиск DOM элементов по тегам и классам

poster
Очень часто нам приходится находить не один елемент, а массив елементов на странице. В этом уроке мы разберемся, как искать элементы по тегам и классам.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В предыдущем уроке мы с вами рассмотрели метод document.getElementById, который позволяет нам находить уникальный елемент и потом мы можем менять его свойства.

Как еще можно находить елементы на странице? Очень часто нам приходится находить не один елемент, а массив елементов на странице.

Давайте добавим в наш html 4 дива

<body>
  <p id='paragraph'>
    Some text
  </p>
  <div>Div 1</div>
  <div>Div 2</div>
  <div>Div 3</div>
  <div>Div 4</div>
  <button onclick='changeColor()'>Change</button>
</body>

Теперь мы можем использовать специальную функцию getElementsByTagName, чтобы найти эти елементы по тегу div.

function changeColor () {
  var elements = document.getElementsByTagName('div')
  console.log(elements)
}

Как мы видим в консоли, у нас вывелся массив из 4 елементов. И если мы хотим поменять свойство первого, то мы должны обратиться к елементу по индексу, как мы делали в уроке "Массивы в Javascript". Ссылку на него я оставлю в тексте видео.

Обращаясь к елементу по индексу мы получаем обычный DOM елемент и можем менять его свойста.

function changeColor () {
  var elements = document.getElementsByTagName('div')
  console.log(elements)
  elements[0].style.color = 'red'
}

Если мы посмотрим в браузер, то елемент у нас стал красным.

Что же делать если елементов много и мы хотим поменять их все? В этом нам поможет цикл for. Циклы вы также можете посмотреть в уроке "Циклы в Javascript".

Давайте напишем цикл от нуля до длины массива. Длину массива можно узнать с помощью свойста length. И внутри цикла поменяем цвет каждого елемента на красный.

function changeColor () {
  var elements = document.getElementsByTagName('div')
  console.log(elements)

  for(var i = 0; i < elements.length; i++) {
    elements[i].style.color = 'red'
  }
}

Если мы посмотрим в браузер, то цвет поменялся у всех елементов.

Но по тегу обращаться к елементам не всегда удобно, так как тегов мало, а елементов, которые вы хотите модифицировать на странице много и их нужно как-то уникально различать. Именно поэтому большинство елементов всегда ищут по классу.

Давайте перепишем этот же код используя классы. Добавим класс к всем div елементам.

<body>
  <div class='article'>Div 1</div>
  <div class='article'>Div 2</div>
  <div class='article'>Div 3</div>
  <div class='article'>Div 4</div>
  <button onclick='changeColor()'>Change</button>
</body>

Теперь давайте заменим метод getElementsByTagName на getElementsByClassName.

function changeColor () {
  var elements = document.getElementsByClassName('article')
  console.log(elements)

  for(var i = 0; i < elements.length; i++) {
    elements[i].style.color = 'red'
  }
}

Как мы видим в браузере, цвета все так же меняются, хотя елементы мы ищем уже по классу.

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео и я обязательно на них отвечу.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
павел
9 лет назад
в тексте class="'container" a в видео "article"
monsterlessons
9 лет назад
Спасибо большое. Исправил.
Дмитрий Мищенко
9 лет назад
Здравствуйте, извините вопрос не по теме, скажите пожалуйста как вы работаете c redux и api, пробую искать ответы в интернете но ничего блин не работает, т.е. у меня есть API https://gist.github.com/dudnyk4singree/f3daabf61a5919240fb095bb60598335#api мне нужно засунуть его в store и манипулировать уже оттуда а я не могу понять как это сделать?
monsterlessons
9 лет назад
Если в двух словах, то в екшене вы делаете асинхронный запрос с помощью redux-thunk например и кладете данные в store. В течении месяца будет серия "Интернет магазин на React/Redux" там такой функционал будет.
Дмитрий Мищенко
9 лет назад
А будет полноценный магазин с авторизацией, аутентификацией, root правам, поиском по товарам,возможность добавления комментариев и, возможностью добавления товаров, системами оплаты и т. д.?
Дмитрий Мищенко
9 лет назад
http://prntscr.com/f2xhu7 http://prntscr.com/f2xhyl http://prntscr.com/f2xi87 я вот так сделал т. е. поместил вызов экшена в componendidmount это норм практика?
monsterlessons
9 лет назад
Это не совсем норм практика. Если мы говорим о redux, то код axios должен быть в екшене например, a екшен вызываться на его месте в componentDidMount. Будет полноценный магазин с поиском, товарами, отдельным товаром, корзиной, категориями. Системы оплаты, авторизации и рут прав не будет.
dogmator
9 лет назад
Видео проигрыватель шикарен регулятором скорости в мобильном исполнении. Даже у yuotube такого нету. Спасибо.
monsterlessons
9 лет назад
На здоровье) Стараюсь.