Как найти дочерние элементы у класса

var elements = document.querySelector('.list-group-item');
  <li class="list-group-item">
    <a href="">link</a>
    <div class="filmname">
      filmname
    </div>
  </li>

Как на чистом JavaScript найти дочерний элемент по имени класса, когда в выборке имеем доступ только к родителю

Raz Galstyan's user avatar

Raz Galstyan

8,0381 золотой знак19 серебряных знаков50 бронзовых знаков

задан 19 окт 2017 в 19:48

Dmitry's user avatar

Например так:

var parent = document.querySelector('.list-group-item');
var child = parent.querySelector('.filmname');

console.log(child);
 <li class="list-group-item">
    <a href="">link</a>
    <div class="filmname">
      filmname
    </div>
  </li>

Nicolas Chabanovsky's user avatar

ответ дан 19 окт 2017 в 19:56

Александр Казаков's user avatar

Александр КазаковАлександр Казаков

1,6281 золотой знак18 серебряных знаков38 бронзовых знаков

5

Можно получить все дочерние элементы из пропорции childNodes. А затем пройтись по ним и узнать у кого есть определенный класс.

var elements = document.querySelector('.list-group-item');
var notes = null;
for (var i = 0; i < elements.childNodes.length; i++) {
    if (elements.childNodes[i].className == "filmname") {
      notes = elements.childNodes[i];
      break;
    }        
}
console.log(notes);
<li class="list-group-item">
  <a href="">link</a>
  <div class="filmname">
    filmname
  </div>
</li>

ΝNL993's user avatar

ΝNL993

3,2872 золотых знака9 серебряных знаков26 бронзовых знаков

ответ дан 19 окт 2017 в 19:56

Raz Galstyan's user avatar

Raz GalstyanRaz Galstyan

8,0381 золотой знак19 серебряных знаков50 бронзовых знаков

3

I believe this would answer your question best

document.querySelector('* > span.four')

This will match the first child element (of any parent) it finds that is a span and also has a class “four” set to it

However since in your example you also had a parent element which you are able to retrieve by id, you could also use this instead

document.querySelector('#test > span.four')

If you have a parent element saved in a variable like in your example, and you wish to search the subtree of that element, using :scope, as Billizzard has mentioned already, is probably your best choice

doc.querySelector(':scope > span.four');

Little extra: If the child element you are looking for isn’t a direct child descendent, but somewhere further down the subtree, you can actually just omit the > like so

document.querySelector('#test span.four')

JavaScript Document

Определение и применение

JavaScript метод document.getElementsByClassName() возвращает массивоподобный (итерируемый) объект (NodeList) всех дочерних элементов, которые соответствуют указанному имени классу, или классам (глобальный атрибут class которых соответствует указанной строке). Объект NodeList автоматически будет обновляться при изменении документа, элементы внутри объекта располагаются в том же порядке, в каком они присутствуют в документе.


Обращаю Ваше внимание на то, что объект NodeList представляет коллекцию узлов, которые могут быть доступны по индексным номерам (индекс начинается с 0). Вы можете использовать свойство length объекта NodeList для определения количества элементов с указанным именем класса. Если искомые элементы
отсутствуют, то значение length будет соответствовать значению 0.


Метод getElementsByClassName() также определен в объекте Element, по этой причине он может быть вызван на любом элементе, не только на объекте document. Элемент на котором он вызывается будет использован в качестве корневого элемента для поиска.

Поддержка браузерами

JavaScript синтаксис:

// поиск элементов с определенным классом
document.getElementsByClassName( name )

// поиск элементов с определенными классами
document.getElementsByClassName( name1 name2 nameX )

name (-s) - String

Спецификация

Document Object Model (DOM) Level 1

Значения параметров

Параметр Описание
name (-s) Строковое значение, представляющее имя класса элемента или список искомых имен классов. При указании нескольких значений классов необходимо разделить имена классов пробелами. Обратите внимание, что при использовании нескольких значений для выбора элемента он должен содержать все перечисленные через пробел классы. Обязательный параметр.

Пример использования

<!DOCTYPE html>
<html>
	<head>
		<title>Использование JavaScript метода document.getElementsByClassName() (перебор элементов в цикле)</title>
	</head>
	<body>
		<button onclick = "myFunc()">Нажми меня</button> <!-- добавляем атрибут событий onclick -->
		<div class = "block">Первый блок</div>
		<div class = "block">Второй блок</div>
		<div class = "block">Третий блок</div>
		<script>
	function myFunc() {
	  let blocks = document.getElementsByClassName( "block" ); // находим элементы с классом block
	  for( let i = 0; i < blocks.length; i++){ // проходим циклом по всем элементам массивоподобного объекта
	    blocks[i].style.color = "green"; // устанавливаем зеленый цвет текста каждому элементу
	  }		
	}
		</script>
	</body>
</html>

В этом примере с использованием атрибута событий onclick при нажатии на кнопку (HTML элемент <button>) вызываем функцию myFunc(), которая с использованием JavaScript метода document.getElementsByClassName() выбирает все элементы с определенным глобальным атрибутом class и инициализируем переменную этим значением (массивоподобный объект). После этого мы проходим циклом по всем элементам этого массивоподобного объекта (объект NodeList) и устанавливаем зеленый цвет текста каждому элементу.

Результат нашего примера:

Пример использования JavaScript метода document.getElementsByClassName()

Пример использования JavaScript метода document.getElementsByClassName()

В следующем примере мы рассмотрим как найти элемент с конкретным классом, с конкретными классами, элемент с конкретным классом, осуществляя при этом поиск внутри другого элемента, а не всего документа:

<!DOCTYPE html>
<html>
	<head>
		<title>Использование JavaScript метода document.getElementsByClassName()</title>
	</head>
	<body>
		<button onclick = "myFunc()">Нажми меня</button> <!-- добавляем атрибут событий onclick -->
		<div class = "first">Первый блок<span class = "test"></span></div>
		<div class = "second block">Второй блок</div>
		<div class = "third block">Третий блок</div>
		<script>
	function myFunc() {
	  let first = document.getElementsByClassName( "first" ),   // находим элементы с классом first
	      second = document.getElementsByClassName( "second" ), // находим элементы с классом second
	      third = document.getElementsByClassName( "third" );   // находим элементы с классом third

	  let extra = document.getElementsByClassName( "second block" ),   // находим элементы с классами second и block
    
	  first[0].style.color = "red";    // изменяем цвет текста у первого элемента коллекции
	  second[0].style.color = "green"; // изменяем цвет текста у первого элемента коллекции
	  third[0].style.color = "blue";   // изменяем цвет текста у первого элемента коллекции
	  extra[0].style.border = "1px solid green"; // устанавливаем сплошную границу зеленого цвета у первого элемента коллекции
	  first[0].getElementsByClassName( "test" )[0].innerHTML=" !!!"; // находим внутри первого элемента коллекции элементы с классом test и изменяем их текстовое содержимое		
	  	  }
		</script>
	</body>
</html>

В этом примере мы с использованием атрибута событий onclick при нажатии на кнопку (HTML элемент <button>) вызываем функцию myFunc(), которая:

  • С использованием JavaScript метода document.getElementsByClassName() выбирает все элементы с определенным глобальным атрибутом class и инициализирует три переменные этими значениями (массивоподобные объекты).
  • С использованием JavaScript метода document.getElementsByClassName() выбирает все элементы, которые имеют два класса (“second” и “block”) и инициализирует переменную этим значением. Обратите внимание, что элемент должен иметь именно два класса, а не один из искомых.
  • После этого в зависимости от переменной устанавливаем первому элементу коллекции свой цвет текста, первому элементу в переменной extra устанавливаем сплошную границу зеленого цвета.
  • И в заключении мы вызываем метод .getElementsByClassName() на первом элементе коллекции, содержащейся в переменной first и находим элемент с классом test внутри этого элемента, которому с помощью метода innerHTML() устанавливаем новое текстовое содержимое.

Результат нашего примера:

Пример использования JavaScript метода document.getElementsByClassName()

Пример использования JavaScript метода document.getElementsByClassName()
JavaScript Document

getElementsByClassName метод Document интерфейс возвращает массив-подобный объект всех дочерних элементов , которые имеют все из данного имени класса (ов).

При вызове на document объекта, полный документ ищется, включая корневой узел. Вы также можете вызвать getElementsByClassName() для любого элемента; он вернет только элементы, которые являются потомками указанного корневого элемента с указанным именем (именами) класса.

Предупреждение: это HTMLCollection . Изменения в DOM будут отражаться в массиве по мере их появления. Если элемент, выбранный этим массивом, больше не подходит для селектора, он будет автоматически удален. Помните об этом в целях повторения.

Syntax

getElementsByClassName(names)

Parameters

  • names – это строка, представляющая имя (имена) класса для сопоставления; несколько имен классов разделяются пробелом
  • getElementsByClassName можно вызвать для любого элемента, а не только для document . Элемент, по которому он вызывается, будет использоваться как корень поиска.

Return value

  • Живая HTMLCollection найденных элементов.

Examples

Получите все элементы,которые имеют класс “тест”:

document.getElementsByClassName('test')

Получите все элементы,которые имеют оба класса-“красный” и “тестовый”:

document.getElementsByClassName('red test')

Получить все элементы,имеющие класс ‘test’,внутри элемента,имеющего ID ‘main’:

document.getElementById('main').getElementsByClassName('test')

Получите первый элемент с классом ‘test’ или undefined если нет соответствующего элемента:

document.getElementsByClassName('test')[0]

Мы также можем использовать методы Array.prototype для любой HTMLCollection , передав HTMLCollection в качестве значения this метода . Здесь мы найдем все элементы div, у которых есть класс test:

var testElements = document.getElementsByClassName('test');
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
  return testElement.nodeName === 'DIV';
});

Получить первый элемент,класс которого-“тест”.

Это наиболее часто используемый метод работы.

<html>
<body>
    <div id="parent-id">
        <p>hello world 1</p>
        <p class="test">hello world 2</p>
        <p>hello world 3</p>
        <p>hello world 4</p>
    </div>

    <script>
        var parentDOM = document.getElementById("parent-id");

        var test = parentDOM.getElementsByClassName("test"); 
        console.log(test); 

        var testTarget = parentDOM.getElementsByClassName("test")[0]; 
        console.log(testTarget); 
    </script>
</body>
</html>

Пример с несколькими классами

document.getElementsByClassName работает очень похоже на document.querySelector и document.querySelectorAll . Выбираются только элементы со ВСЕМИ указанными именами классов.

HTML

<span class="orange fruit">Orange Fruit</span>
<span class="orange juice">Orange Juice</span>
<span class="apple juice">Apple Juice</span>
<span class="foo bar">Something Random</span>
<textarea id="resultArea" style="width:98%;height:7em"></textarea>

JavaScript

var allOrangeJuiceByClass = document.getElementsByClassName('orange juice');
var result = "document.getElementsByClassName('orange juice')";
for (var i=0; i < allOrangeJuiceByClass.length; i++) {
    result += "n  " + allOrangeJuiceByClass[i].textContent;
}


var allOrangeJuiceQuery = document.querySelectorAll('.orange.juice');
result += "nndocument.querySelectorAll('.orange.juice')";
for (var i=0; i < allOrangeJuiceQuery.length; i++) {
    result += "n  " + allOrangeJuiceQuery[i].textContent;
}

document.getElementById("resultArea").value = result;

Result

Specifications

Specification
DOM Standard
# ref-for-dom-document-getelementsbyclassname①

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet
getElementsByClassName

1

12

3

9

9.5

3.1

1

18

4

10.1

2

1.0


Web APIs

  • Document.getAnimations()

    Метод getAnimations()интерфейса Document возвращает массив всех объектов,действующих в данный момент,целевые элементы которых являются потомками None.

  • Document.getElementById()

    Метод документа getElementById()возвращает объект,свойство которого соответствует указанной строке.

  • Document.getElementsByName()

    Метод getElementsByName()объекта Document возвращает коллекцию NodeList с заданным атрибутом в виде живой коллекции NodeList,то есть она автоматически

  • Document.getElementsByTagName()

    Метод getElementsByTagName интерфейса Document возвращает HTMLCollection с заданным именем.Ищется весь документ,включая корневой узел.

<Элемент объекта

пример

Измените текст первого пункта списка с классом = «ребенок» (index 0) в виде списка с классом = «пример»:

var list = document.getElementsByClassName(“example”)[0];
list.getElementsByClassName(“child”)[0].innerHTML = “Milk”;

Перед изменением текста:

  • Coffee
  • Tea

После изменения текста:

  • Milk
  • Tea

Попробуй сам ”

Больше “Try it Yourself” примеры ниже.


Определение и использование

getElementsByClassName() метод возвращает коллекцию дочерних элементов Элемент с именем указанного класса, в качестве объекта NodeList.

Объект NodeList представляет коллекцию узлов. Узлы могут быть доступны с помощью индексов. Индекс начинается с 0.

Совет: Вы можете использовать длину свойство объекта NodeList , чтобы определить количество дочерних узлов с указанным именем класса, то вы можете перебрать все узлы и извлекать информацию , которую Вы хотите.


Поддержка браузеров

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

метод
getElementsByClassName() 4,0 9,0 3.0 3,1 9,5

Синтаксис

element .getElementsByClassName( classname )

Значения параметров

параметр Тип Описание
classname String Необходимые. Имя класса дочерних элементов, которые вы хотите получить.

Для поиска нескольких имен классов, разделив их пробелами, как “child color” .

Технические подробности

DOM Версия: Базовый уровень 1 Элемент объекта
Возвращаемое значение: Нодлист объект, представляющий коллекцию дочерних элементов элементов с именем указанного класса. Элементы в возвращаемых коллекциях сортируются, как они появляются в исходном коде.

Примеры

Еще примеры

пример

Изменение цвета фона второго элемента с классом = «ребенок» внутри <div> элемент:

var x =
document.getElementById(“myDIV”);
x.getElementsByClassName(“child”)[1].style.backgroundColor
= “red”;

Попробуй сам ”

пример

Узнайте, как много элементов с классом = «ребенком» есть внутри <div> элемент (используя свойство длины объекта NodeList):

var x =
document.getElementById(“myDIV”).getElementsByClassName(“child”).length;

В результате х будет:

3

Попробуй сам ”

пример

Изменение цвета фона первого элемента как с “child” и “color” класса внутри элемента с классом = «пример»:

var x = document.getElementsByClassName(“example”)[1];
x.getElementsByClassName(“child color”)[0].style.backgroundColor = “red”;

Попробуй сам ”

пример

Изменение цвета фона всех элементов с классом = «ребенок» внутри <div> элемент:

var x = document.getElementById(“myDIV”);
var y =
x.getElementsByClassName(“child”);
var i;
for (i = 0; i < y.length; i++)
{
  y[i].style.backgroundColor = “red”;
}

Попробуй сам ”


Похожие страницы

Учебник CSS: CSS селекторы

CSS Reference: CSS .class Selector

HTML DOM Ссылка: документ. getElementsByClassName()

HTML DOM Ссылка: className Property

HTML DOM Ссылка: classList Property

HTML DOM Ссылка: HTML DOM Style Object


<Элемент объекта

Добавить комментарий