No usar en el navegador
En el navegador, use document.querySelect('[attribute-name]')
.
Pero si está realizando pruebas unitarias y su dom simulado tiene una implementación de querySelector flakey, esto hará el truco.
Esta es la respuesta de @ kevinfahy, simplemente recortada para ser un poco con las funciones de flecha de grasa ES6 y convirtiendo HtmlCollection en una matriz a costa de la legibilidad, tal vez.
Por lo tanto, solo funcionará con un transpilador ES6. Además, no estoy seguro de qué tan eficiente será con muchos elementos.
function getElementsWithAttribute(attribute) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) !== null);
}
Y aquí hay una variante que obtendrá un atributo con un valor específico
function getElementsWithAttributeValue(attribute, value) {
return [].slice.call(document.getElementsByTagName('*'))
.filter(elem => elem.getAttribute(attribute) === value);
}