Recentemente, estive pensando sobre elementos e seletores HTML. Normalmente, começamos procurando por um elemento(s) por meio de querySelector/querySelectorAllO que faz sentido, mas e se o senhor quiser validar se um elemento que não foi especificamente selecionado corresponde a um determinado seletor? Por exemplo, digamos que o senhor tenha uma função que pressuponha a presença de classes ou atributos nos elementos que lhe foram passados, e as coisas podem dar errado se o elemento fornecido não se encaixar? Entre Element.matches!


O JavaScript


Como detalha a MDN, Element.matches é a API padrão, mas cada fornecedor implementou uma matchesSelector versão:



function determineIfElementMatches(element, selector) {
	return element.matches(selector);
}

// Sample usage
var matches = determineIfElementMatches(myDiv, 'div.someSelector[some-attribute=true]');


Para contornar toda a confusão do fornecedor, podemos simplesmente usar o Element prototype:



function selectorMatches(el, selector) {
	var p = Element.prototype;
	var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {
		return [].indexOf.call(document.querySelectorAll(s), this) !== -1;
	};
	return f.call(el, selector);
}


Incluí um polyfill se o navegador não for compatível com o matches mas os navegadores modernos devem suportar a função de alguma forma. Como mencionei no início da postagem, acho que `matches` é provavelmente mais usado como medida de validação, mas se o senhor encontrar usos melhores, me avise!

  • Menu giratório 3D animado com CSS
  • 5 APIs HTML5 que o senhor não sabia que existiam

    Quando se diz ou se lê “HTML5”, é de se esperar que dançarinas exóticas e unicórnios entrem na sala ao som de “I’m Sexy and I Know It”. Mas o senhor pode nos culpar? Assistimos à estagnação das APIs fundamentais por tanto tempo que um recurso básico…

  • Crie um efeito de rotação e zoom com CSS3

    Caso o senhor não saiba, Animações CSS são fantásticas. Elas são suaves, menos exigentes do que o JavaScript e são o futuro da animação de nós nos navegadores. A solução móvel do Dojo, dojox.mobileusa animações CSS em vez de JavaScript para reduzir o impacto do JavaScript no aplicativo. Um dos meus efeitos favoritos…

  • FAQs sofisticadas com MooTools Sliders: Versão 2