Uczymy się czym jest Element.matches oraz jak wyglądają prawdziwe polyfille i jak z nich korzystać. Do dzieła.

Nasz kawałek HTML:

<template id="myTemplate">
        <h1>My heading</h1>
        <p>My para</p>
</template>

Element.matches sprawdza, czy dany element pasuje do danego selektora:

window.addEventListener('DOMContentLoaded', function(){
    
    let tpl = document.getElementById("myTemplate");

    console.log(tpl.matches("template"));
    //true
    console.log(tpl.matches("#myTemplate"));
    //true
    console.log(tpl.matches(".btn-danger"));
    //false
    
});

Polyfill znajdujemy w internecie (albo korzystając z webpacków i innych takich samo się wszystko robi). Wygląda mniej-więcej tak:

function isMatch(node, selector) {
    if(node.matches) { 
      return node.matches(selector);
    } else { 
      var matches = Element.prototype.matchesSelector || 
        Element.prototype.mozMatchesSelector ||
        Element.prototype.msMatchesSelector || 
        Element.prototype.oMatchesSelector || 
        Element.prototype.webkitMatchesSelector;
      return matches.call(node, selector);
    }
  }

I tak jest zbyt ładny jak na polyfill i zbyt wyszukany (dostarcza fasadę do używania go niezależnie od tego, czy przeglądarka coś obsługuje czy nie).

Zazwyczaj polyfill to sprawdzenie czy coś istnieje (np. pętla forEach) i jeżeli nie – nadpisanie tego niezbyt czytelnym kodem, który będzie działać na starych przeglądarkach.