alan coromano
¿Es posible hacer una búsqueda por querySelectorAll()
usando múltiples condiciones no relacionadas? Si es así, ¿cómo? Y, ¿cómo especificar si esos son criterios AND u OR?
Por ejemplo:
como encontrar todo formas, pagarena leyendas con un solo querySelectorAll()
¿llamar? ¿Posible?
TJ Crowder
¿Es posible hacer una búsqueda por
querySelectorAll
usando múltiples condiciones no relacionadas?
Sí porque querySelectorAll
acepta selectores CSS completos, y CSS tiene el concepto de grupos selectores, 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
o p
o legend
.
CSS también tiene el otro concepto: Restricción basada en más criterios. Simplemente combina múltiples aspectos de un selector. Por ejemplo:
var list = document.querySelectorAll("div.foo");
…devolverá una lista de todos div
elementos que también (y) tener la clase foo
ignorando a los demás div
elementos.
Por supuesto, puedes combinarlos:
var list = document.querySelectorAll("div.foo, p.bar, div legend");
…que significa “Incluye cualquier div
elemento que también tiene la foo
clase, cualquiera p
elemento que también tiene la bar
clase y cualquier legend
elemento que también está dentro de un div
.”
-
¿Existe la posibilidad de usar una sola clase de document.querySelectorAll? Por ejemplo, tengo var hotspots = document.querySelectorAll(“.clickMapItem.text , .clickMapItem.multiImageText”); var yo; for (i = 0; i
– Milla Mijatović
5 de noviembre de 2016 a las 9:18
-
@MileMijatovic: Las preguntas deben publicarse como preguntas y no como comentarios. Pero vea: stackoverflow.com/questions/25238153/…
–TJ Crowder
5 de noviembre de 2016 a las 9:22
-
Ok, pero en general, ¿es posible hacer lo que pedí? El enlace no ayudó
– Milla Mijatović
5 de noviembre de 2016 a las 10:04
-
El concepto de selector de grupos me funcionó todavía en 2018… gracias por compartir
– Eric Hepperle – CodeSlayer2010
18 oct 2018 a las 15:16
-
Año tras año, sigo usando
document.querySelectorAll("div.foo", "div.bar")
y nunca funcionó. Code UX es el próximo UX 😉– Gabriel Glenn
12 de febrero de 2021 a las 13:54
mikus
De acuerdo con la documentación, al igual que con cualquier selector css, puede especificar tantas condiciones como desee, y se tratan como ‘O’ lógicos.
Este ejemplo devuelve una lista de todos los elementos div dentro del documento con una clase de “nota” o “alerta”:
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 el id como el nombre del elemento y se deben cumplir ambas condiciones. Para las clases es tan obvio como “.class1.class2
” para requerir objeto de 2 clases.
Todas las combinaciones posibles de ambos son válidas, por lo que puede obtener fácilmente expresiones equivalentes a ‘OR’ y ‘AND’ más sofisticadas.
-
Si bien el método en sí es correcto, no es necesario hacer referencia a jQuery para explicar CSS (especialmente porque la pregunta del OP se limita a JavaScript).
– Chaya Cooper
18 de diciembre de 2019 a las 19:58
-
supongo que no duele 🙂 una forma rápida de descubrir más opciones para aquellos que no trabajan con CSS a diario
– mikus
5 de julio de 2022 a las 10:34
alejandro dv
Con JavaScript puro puedes hacer esto (como SQL) y cualquier cosa que necesites, 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>
-
esto realmente no responde la pregunta, específicamente la
how to specify whether those are AND or OR criteria
parte, ver respuesta aceptada–Meidan Alon
21 de marzo de 2019 a las 20:36
Sí, querySelectorAll
toma un grupo de selectores:
form, p, legend
Usando solo document.querySelectorAll('selector1, selector2, selector3')
no funcionó para mí, tuve que usar forEach()
junto con el método para lograr el resultado deseado.
document.querySelectorAll('selector1, selector2, selector3').forEach(item => {
item.//code
})
document.querySelectorAll('#id1, #id2, #id3').style="background-color: red";
document.querySelectorAll('#id4, #id5, #id6').forEach(item => {
item.style="background-color: red";
})
<div id="id1">id1</div>
<div id="id2">id2</div>
<div id="id3">id3</div>
<div id="id4">id4</div>
<div id="id5">id5</div>
<div id="id6">id6</div>
Súper Kai – Kazuya Ito
- AND lógico (&&) se puede archivar especificando elementos y atributos sin comas.
- O lógico (||) se puede archivar especificando elementos y atributos con comas.
Por ejemplo, hay 2 formularios como se muestra a continuación:
<form class="form1" method="post">
<input type="text" id="input1" name="fruits" value="Apple">
<p id="p1">Orange</p>
</form>
<form class="form2" method="post">
<input type="text" id="input2" name="fruits" value="Banana">
<p id="p2">Kiwi</p>
</form>
Luego, puede seleccionar de manzana <input>
y de plátano <input>
con [name="fruits"]
Como se muestra abajo:
document.querySelectorAll('[name="fruits"]');
// Apple's <input> and Banana's <input>
Ahora, al especificar elementos y atributos sin comas, puede seleccionar solo de manzana <input>
Como se muestra abajo:
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
document.querySelectorAll('form.form1 input[name="fruits"][id="input1"]');
// Apple's <input>
Además, puede reemplazar .form1
con [class="form1"]
y [id="input1"]
con #input1
Como se muestra abajo:
// .form1 [id="input1"]
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
document.querySelectorAll('form[class="form1"] input[name="fruits"]#input1');
// Apple's <input>
A continuación, puede seleccionar de manzana <input>
con #input1
Como se muestra abajo:
document.querySelectorAll('#input1');
// Apple's <input>
Ahora, al especificar elementos y atributos con comas, puede seleccionar de manzana <input>
, de naranja <p>
, de plátano <input>
y de kiwi <p>
Como se muestra abajo:
// ↓ ↓ ↓ ↓ ↓
document.querySelectorAll('#input1, #input2, p');
// ↑ ↑
// Apple's <input>, Orange's <p>, Banana's <input> and Kiwi's <p>
y
Además, por supuesto, puedes usar ambos Y lógico y O lógico juntos como se muestra a continuación:
document.querySelectorAll('entrada#entrada1, entrada#entrada2, p#p1')[
// Apple's <input>, Orange's <p> and Banana's <input>
No estoy seguro de lo que quieres decir con “Criterios Y u O“. ¿Puedes dar un ejemplo para eso?
– Bergi
30 de noviembre de 2015 a las 15:26
La documentación cubre esto en el primer ejemplo..
– Andy
30 de noviembre de 2015 a las 15:28