Não use no navegador
No navegador, use document.querySelect('[attribute-name]')
.
Mas se você estiver testando a unidade e o seu Dom zombado tiver uma implementação flakey querySelector, isso funcionará.
Esta é a resposta de @ kevinfahy, reduzida para ser um pouco com as funções de seta gorda ES6 e convertendo o HtmlCollection em uma matriz, talvez com o custo de legibilidade.
Portanto, ele funcionará apenas com um transpiler ES6. Além disso, não tenho certeza de qual será o desempenho de muitos elementos.
function getElementsWithAttribute(attribute) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) !== null);
}
E aqui está uma variante que obterá um atributo com um valor específico
function getElementsWithAttributeValue(attribute, value) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) === value);
}