<p data-foo="bar">¿Cómo puedes hacer el equivalente a
document.querySelectorAll('[data-foo]')donde querySelectorAll no está disponible ?
Necesito una solución nativa que funcione al menos en IE7. No me importa IE6.
                    
                        javascript
                                dom
                                
                    
                    
                        ryanve
fuente
                
                fuente

querySelectorAllno está disponible?note - I don't care all IERespuestas:
Podría escribir una función que ejecute getElementsByTagName ('*') y devuelva solo aquellos elementos con un atributo "data-foo":
Luego,
fuente
!= nulles la forma ideal (mejor que mi comentario anterior) porque en el antiguo IE es posible que getAttribute devuelva un valor cuyo valortypeofes'number'document.getElementsByTagName('*')lugar dedocument.all?hasAttributelugar degetAttribute() !== null, ya que solo desea verificar la existencia y no su valor?Utilizar
o
para encontrar elementos por atributo. Ahora es compatible con todos los navegadores relevantes (incluso IE8): http://caniuse.com/#search=queryselector
fuente
Jugué un poco y terminé con esta solución cruda:
El uso es bastante simple y funciona incluso en IE8:
http://fiddle.jshell.net/9xaxf6jr/
Pero recomiendo usar
querySelector/Allpara esto (y para admitir navegadores antiguos, use un polyfill ):fuente
Prueba esto funciona
document.querySelector ('[atributo = "valor"]')
ejemplo:
fuente
Eso también funciona:
Entonces:
fuente
document.querySelector('[data-foo="bar"]');Prueba esto: cambié ligeramente las respuestas anteriores:
Luego,
fuente
Una pequeña modificación en la respuesta de @kevinfahy , para permitir obtener el atributo por valor si es necesario:
fuente
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.
Y aquí hay una variante que obtendrá un atributo con un valor específico
fuente