<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
querySelectorAll
no está disponible?note - I don't care all IE
Respuestas:
Podría escribir una función que ejecute getElementsByTagName ('*') y devuelva solo aquellos elementos con un atributo "data-foo":
Luego,
fuente
!= null
es la forma ideal (mejor que mi comentario anterior) porque en el antiguo IE es posible que getAttribute devuelva un valor cuyo valortypeof
es'number'
document.getElementsByTagName('*')
lugar dedocument.all
?hasAttribute
lugar 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
/All
para 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