The Element
method getElementsByClassName()
returns a live HTMLCollection
which contains every descendant element which has the specified class name or names.
The method getElementsByClassName()
on the Document
interface works essentially the same way, except it acts on the entire document, starting at the document root.
var elements = element.getElementsByClassName(names);
names
DOMString
containing one or more class names to match on, separated by whitespace.An HTMLCollection
providing a live-updating list of every element which is a member of every class in names
.
As always, the returned collection is live, meaning that it always reflects the current state of the DOM tree rooted at the element on which the function was called. As new elements that match names
are added to the subtree, they immediately appear in the collection. Similarly, if an existing element that doesn't match names
has its set of classes adjusted so that it matches, it immediately appears in the collection.
The opposite is also true; as elements no longer match the set of names, they are immediately removed from the collection.
In quirks mode, the class names are compared in a case-insensitive fashion. Otherwise, they're case sensitive.
To look for elements that include among their classes a single specified class, we just provide that class name when calling getElementsByClassName()
:
element.getElementsByClassName('test');
This example finds all elements that have a class of test
, which are also a descendant of the element that has the id
of main
:
document.getElementById('main').getElementsByClassName('test');
To find elements whose class lists include both the red
and test
classes:
element.getElementsByClassName('red test');
You can use either the item()
method on the returned HTMLCollection
or standard array syntax to examine individual elements in the collection. However the following code will not work as one might expect because "matches"
will change as soon as any "colorbox"
class is removed.
var matches = element.getElementsByClassName('colorbox'); for (var i=0; i<matches.length; i++) { matches[i].classList.remove('colorbox'); matches.item(i).classList.add('hueframe'); }
Instead, use another method, such as:
var matches = element.getElementsByClassName('colorbox'); while (matches.length > 0) { matches.item(0).classList.add('hueframe'); matches[0].classList.remove('colorbox'); }
This code finds descendant elements with the "colorbox"
class, adds the class "hueframe"
, by calling item(0),
then removes "colorbox"
(using array notation). Another element (if any are left) will then become item(0)
.
We can also use methods of Array.prototype
on any HTMLCollection
by passing the HTMLCollection
as the method's this
value. Here we'll find all <div>
elements that have a class of test
:
var testElements = document.getElementsByClassName('test'); var testDivs = Array.prototype.filter.call(testElements, function(testElement) { return testElement.nodeName === 'DIV'; });
Specification | Status | Comment |
---|---|---|
DOM The definition of 'Element.getElementsByClassName()' in that specification. | Living Standard | Initial definition |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | Yes | ? | Yes
|
9 | Yes | Yes
|
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | ? | ? | ? | ? | ? | ? | ? |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/element/getElementsByClassName