¿Es posible realizar una búsqueda por querySelectorAll usando múltiples condiciones no relacionadas? Si es así, ¿cómo? ¿Y cómo especificar si esos son criterios Y u O?
Por ejemplo:
¿Cómo encontrar todos los formularios s, p sy leyendas con una sola llamada querySelectorAll ? ¿Posible?
javascript
Alan Coromano
fuente
fuente
Respuestas:
Sí, porque
querySelectorAll
acepta selectores CSS completos y CSS tiene el concepto de grupos de selectores , lo que le permite especificar más de un selector no relacionado. Por ejemplo:var list = document.querySelectorAll("form, p, legend");
... devolverá una lista que contiene cualquier elemento que sea un
form
op
olegend
.CSS también tiene el otro concepto: restringir en función de más criterios. Simplemente combina varios aspectos de un selector. Por ejemplo:
var list = document.querySelectorAll("div.foo");
... devolverá una lista de todos los
div
elementos que también ( y ) tienen la clasefoo
, ignorando otrosdiv
elementos.Por supuesto, puedes combinarlos:
var list = document.querySelectorAll("div.foo, p.bar, div legend");
... que significa "Incluir cualquier
div
elemento que también tenga lafoo
clase, cualquierp
elemento que también tenga labar
clase y cualquierlegend
elemento que también esté dentro de undiv
".fuente
De acuerdo con la documentación, al igual que con cualquier selector css, puede especificar tantas condiciones como desee, y se tratan como un 'O' lógico.
var matches = document.querySelectorAll("div.note, div.alert");
fuente: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
Mientras tanto, para obtener la funcionalidad 'Y', puede, por ejemplo, simplemente usar un selector de atributos múltiples, como dice jquery:
https://api.jquery.com/multiple-attribute-selector/
ex.
"input[id][name$='man']"
especifica tanto la identificación como el nombre del elemento y se deben cumplir ambas condiciones. Para las clases es tan obvio como ".class1.class2
" requerir un objeto de 2 clases.Todas las combinaciones posibles de ambos son válidas, por lo que puede obtener fácilmente el equivalente de expresiones 'OR' y 'AND' más sofisticadas.
fuente
Sí,
querySelectorAll
toma un grupo de selectores :fuente
Con JavaScript puro puede hacer esto (como SQL) y cualquier cosa que necesite, básicamente:
<html> <body> <input type='button' value='F3' class="c2" id="btn_1"> <input type='button' value='F3' class="c3" id="btn_2"> <input type='button' value='F1' class="c2" id="btn_3"> <input type='submit' value='F2' class="c1" id="btn_4"> <input type='submit' value='F1' class="c3" id="btn_5"> <input type='submit' value='F2' class="c1" id="btn_6"> <br/> <br/> <button onclick="myFunction()">Try it</button> <script> function myFunction() { var arrFiltered = document.querySelectorAll('input[value=F2][type=submit][class=c1]'); arrFiltered.forEach(function (el) { var node = document.createElement("p"); node.innerHTML = el.getAttribute('id'); window.document.body.appendChild(node); }); } </script> </body> </html>
fuente
how to specify whether those are AND or OR criteria
parte, vea la respuesta aceptada