#4 Универсальный поиск DOM элементов

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

В предыдущих уроках мы разбирали с вами методы поиска по Id, классам и тегам. В этом уроке мы рассмотрим универсальный вариант, которым можно заменить все предыдущие. Есть два метода document.querySelector и document.querySelectorAll

<div id='container'>
  Test
</div>
<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>

В нашем html у меня написаны 4 дива с классом article и див с id container.

Давайте рассмотрим как мы можем найти див по id и поменять в нем цвет текста.

function changeColor () {
  var element = document.querySelector('#container')
  element.style.color = 'red'
}

Мы ищем наш елемент с помощью querySelector. Чтобы указать, что мы хотим найти именно елемент по id мы ставим перед названием решетку. Дальше мы можем менять цвет как обычно.

Точно также мы можем искать по тегу все елементы с помощью querySelectorAll

function changeColor () {
  var elements = document.querySelectorAll('div')

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

Здесь мы использовали просто тег div и циклом поменяли цвет у всех елементов.

Единственная разница между querySelectorAll и querySelector в том, что первый возвращает массив елементов, а второй только первый елемент найденный на странице.

Для поиска по классам впереди названия класса нужно ставить точку.

function changeColor () {
  var elements = document.querySelectorAll('.article')

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

Давайте теперь попробуем более сложный пример. Например в html сделаем вот такую разметку

<body>
  <div class='description'>
    <p>
      Text
    </p>
  </div>
  <button onclick='changeColor()'>Change</button>
</body>

И теперь мы можем найти елемент вот так

function changeColor () {
  var element = document.querySelector('.description p')

  element.style.border = '1px solid green'
}

То есть мы указали, что хотим найти класс description и потом в нем найти тег p.

И такие селекторы могут быть достаточно сложными.

Давайте напишем еще один пример в котором будем менять цвет у чекбоксов, которые отмечены.

<body>
  <div class='container'>
    <div>
      <input type='checkbox' />
      Movies
    </div>
    <div>
      <input type='checkbox' /> Sports
    </div>
    <div>
      <input type='checkbox' /> Reading
    </div>
    <div>
      <input type='checkbox' /> Sleeping
    </div>
  </div>
  <button onclick='changeColor()'>Change</button>
</body>

Теперь найдем все инпуты внутри класса container, которые типа checkbox и которые checked.

function changeColor () {
  var elements= document.querySelectorAll('.container input[type="checkbox"]:checked')
  for(var i = 0; i < elements.length; i++) {
    elements[i].parentElement.style.color = 'red'
  }
}

Потом мы проходимся по ним циклом и задаем цвет на паренте с помощью метода .parentElement.

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

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

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Serafim
9 лет назад
Странно, почему тут не работает map
monsterlessons
9 лет назад
Я написал без map, так как это курс для начинающих и я не хотел его усложнять.
Serafim
9 лет назад
У меня почему то не работает map =) Пишу вроде всё правильно, а пишет - map is not a function https://cdn1.savepice.ru/uploads/2017/11/16/12038cb0f329d42a5968a5d8b17f194b-full.png
monsterlessons
9 лет назад
Потому что map - это свойство массива, а nodeList - это не массив. Вам нужно сначала превратить NodeList в массив. Array.from(document.querySelectorAll('div'))
Дмитрий Мищенко
9 лет назад
Здравствуйте, подскажите пожалуйста что вы используете для пагинации на реакте?
monsterlessons
9 лет назад
Добрый день. https://github.com/AdeleD/react-paginate
Дмитрий Мищенко
9 лет назад
Не могу понять почему не работает установил подключаю вот http://prntscr.com/f4akin CommentList это класс в нем 15 статей, и демка их блин не работает? Все статью выводятся и внизу это http://prntscr.com/f4akvq а пагинации нет
monsterlessons
9 лет назад
Это пакет исключительно для пагинации. Вам нужно стилизировать пагинацию самому , либо подключить bootstrap. Количество выводимых елементов на странице он вообще никак не контролирует. Он просто рендерит пагинацию по заданым в него числам.
Дмитрий Мищенко
9 лет назад
а как тогда управлять кол-вом выводимых элементов, у меня есть 15 статей а на странице должно быть 3?
monsterlessons
9 лет назад
выводите 3 статьи на странице, а не 15.