W3cubDocs

/DOM

element.matches

The Element.matches() method returns true if the element would be selected by the specified selector string; otherwise, returns false.

Syntax

var result = element.matches(selectorString); 
  • result holds the return value true or false.
  • selectorString is a string representing the selector to test.

Example

<ul id="birds">
  <li>Orange-winged parrot</li>
  <li class="endangered">Philippine eagle</li>
  <li>Great white pelican</li>
</ul>

<script type="text/javascript">
  var birds = document.getElementsByTagName('li');

  for (var i = 0; i < birds.length; i++) {
    if (birds[i].matches('.endangered')) {
      console.log('The ' + birds[i].textContent + ' is endangered!');
    }
  }
</script>

This will log "The Philippine eagle is endangered!" to the console, since the element has indeed a class attribute with value endangered.

Exceptions

SYNTAX_ERR
The specified selector string is invalid.

Polyfill

For browsers that do not support Element.matches() or Element.matchesSelector(), but carry support for document.querySelectorAll(), a polyfill exists:

if (!Element.prototype.matches) {
    Element.prototype.matches = 
        Element.prototype.matchesSelector || 
        Element.prototype.mozMatchesSelector ||
        Element.prototype.msMatchesSelector || 
        Element.prototype.oMatchesSelector || 
        Element.prototype.webkitMatchesSelector ||
        function(s) {
            var matches = (this.document || this.ownerDocument).querySelectorAll(s),
                i = matches.length;
            while (--i >= 0 && matches.item(i) !== this) {}
            return i > -1;            
        };
}

However, given the practicality of supporting older browsers, the following should suffice for most (if not all) practical cases (i.e. IE9+ support).

if (!Element.prototype.matches) {
    Element.prototype.matches = Element.prototype.msMatchesSelector;
}

Specification

Specification Status Comment
DOM
The definition of 'Element.prototype.matches' in that specification.
Living Standard Initial definition

Browser compatibilityUpdate compatibility data on GitHub

Desktop
Chrome Edge Firefox Internet Explorer Opera Safari
Basic support 34
34
Yes
Uses the non-standard name: webkitMatchesSelector
Yes
Yes
Yes
Uses the non-standard name: webkitMatchesSelector
Yes
Uses the non-standard name: msMatchesSelector
34
34
44
Uses the non-standard name: webkitMatchesSelector
3.6
Prior to Firefox 4, invalid selector strings caused false to be returned instead of throwing an exception.
See bug 1119718 for removal.
Uses the non-standard name: mozMatchesSelector
9
9
Uses the non-standard name: msMatchesSelector
21
21
15
Uses the non-standard name: webkitMatchesSelector
11.5 — 15
Uses the non-standard name: oMatchesSelector
7
7
5
Uses the non-standard name: webkitMatchesSelector
Mobile
Android webview Chrome for Android Edge Mobile Firefox for Android Opera for Android iOS Safari Samsung Internet
Basic support Yes
Yes
Yes
Uses the non-standard name: webkitMatchesSelector
34
34
Yes
Uses the non-standard name: webkitMatchesSelector
Yes
Yes
Yes
Uses the non-standard name: webkitMatchesSelector
Yes
Uses the non-standard name: msMatchesSelector
34
34
44
Uses the non-standard name: webkitMatchesSelector
4
See bug 1119718 for removal.
Uses the non-standard name: mozMatchesSelector
21
21
15
Uses the non-standard name: webkitMatchesSelector
11.5 — 15
Uses the non-standard name: oMatchesSelector
8
8
Yes
Uses the non-standard name: webkitMatchesSelector
Yes
Yes
Yes
Uses the non-standard name: webkitMatchesSelector

See also

© 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/matches