Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение доступа к дочерним элементам через класс (https://javascript.ru/forum/events/71590-poluchenie-dostupa-k-dochernim-ehlementam-cherez-klass.html)

666FoX666 30.11.2017 00:47

Получение доступа к дочерним элементам через класс
 
Здравствуйте! Имею следующий код:
<DOCTYPE !html>
<html>
	<head>
	</head>
	
	<body>
		<div id="test">
			<h1>First Child</h1>
			<p>Last Child</p>
		</div>
		
		<div class="test2">
			<h1>First Child #2</h1>
			<p>Last Child #2</p>
		</div>
		
		<div class="test2">
			<h1>First Child #2</h1>
			<p>Last Child #2</p>
		</div>
		
		<script>
			document.getElementById('test').lastElementChild.style.color = 'red';
			//document.getElementById('test').children[1].style.color = 'red';
			
			//document.getElementsByClassName('test2').lastElementChild.style.color = 'green';
			//document.getElementsByClassName('test2').children[1].style.color = 'green';
		</script>
	</body>
</html>

Вопрос в том, что используя в качестве идентификатора айди элемента (В первом варианте test), мы спокойно можем редактировать свойства необходимого дочернего элемента, а есть ли такой же способ для редактирования дочернего элемента для всех указанных классов?

P.S. Крайне желательно не использовать сторонние библиотеки, а силами самого JS.

Заранее спасибо!

рони 30.11.2017 00:54

666FoX666,
getElementsByClassName это список элементов, нужен индекс
Цитата:

Сообщение от 666FoX666
есть ли такой же способ для редактирования дочернего элемента для всех указанных классов?

циклом

рони 30.11.2017 01:01

666FoX666,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .green  {
    color: #008000;
  }

  </style>

  </head>

  <body>
    <div id="test">
      <h1>First Child</h1>
      <p>Last Child</p>
    </div>

    <div class="test2">
      <h1>First Child #2</h1>
      <p>Last Child #2</p>
    </div>

    <div class="test2">
      <h1>First Child #2</h1>
      <p>Last Child #2</p>
    </div>

    <script>
      [].forEach.call( document.querySelectorAll('.test2'), function(el) {
              el.querySelector('p').classList.add('green');
              //el.children[1].style.color = 'green';
      });
    </script>


</body>
</html>

666FoX666 30.11.2017 01:04

рони,
понял, большое спасибо!

666FoX666 30.11.2017 02:28

рони, скажу честно, Ваш цикл мне не очень понятен, но я погуглю и разберу его.
Сделал, видимо, крайне глупо (В консоль ошибку даёт), но тем не менее это работает. Вот о чём речь:
var cc = document.getElementsByClassName('test2');
			
			for (var i = 0; i <= cc.length; i++) {
				cc[i].lastElementChild.style.color = 'green';
			}

svl 30.11.2017 04:35

...

рони 30.11.2017 07:14

Цитата:

Сообщение от 666FoX666
(В консоль ошибку даёт),

не существует элемента с индексом равным длине списка(массива) элементов!!!
Цитата:

Сообщение от 666FoX666
for (var i = 0; i <= cc.length; i++) {


рони 30.11.2017 07:17

Цитата:

Сообщение от 666FoX666
Ваш цикл мне не очень понятен, но я погуглю и разберу его.

коллекции-не-массивы


Часовой пояс GMT +3, время: 13:08.