¿Existe una función similar jQuery
.closest()
pero para atravesar descendientes y devolver solo los más cercanos?
Sé que hay una .find()
función, pero devuelve todas las coincidencias posibles, no las más cercanas.
Editar:
Aquí está la definición de más cercano (al menos para mí) :
En primer lugar, se atraviesan todos los niños, luego se atraviesan los niños de cada individuo.
En el ejemplo que se muestra a continuación id='2'
se muestran los .closest
descendientes más cercanos deid="find-my-closest-descendant"
<div id="find-my-closest-descendant">
<div>
<div class="closest" Id='1'></div>
</div>
<div class="closest" Id='2'></div>
</div>
Por favor vea el enlace JSfiddle .
.find("filter here").eq(0)
?:first
filtro?Respuestas:
Según su definición de
closest
, he escrito el siguiente complemento:fuente
.closest()
función jQuery , también coincide con el elemento en el que se invocó. Mira mi jsfiddle . Al cambiarlo a$currentSet = this.children(); // Current place
, comenzará con sus hijos en suSi por descendiente "más cercano" te refieres al primer hijo, entonces puedes hacer:
O:
O, para buscar la primera aparición de un elemento específico, puede hacer:
O:
Realmente, sin embargo, necesitamos una definición sólida de lo que significa "descendiente más cercano".
P.ej
¿Qué
<span>
sería$('#foo').closestDescendent('span')
volver?fuente
$('#foo').find('.whatever').first();
es "primero en amplitud" o "primero en profundidad"Puedes usar
find
con el:first
selector:La línea anterior encontrará el primer
<p>
elemento en los descendientes de#parent
.fuente
find('whatever:first')
.¿Qué hay de este enfoque?
Este selector de "hijo directo" funciona para mí.
fuente
Solución JS pura (usando ES6).
Ejemplo
Considerando la siguiente estructura:
Mostrar fragmento de código
fuente
while
expresión tiene efectos secundarios. 2) Uso del.matches
cheque en dos líneas en lugar de solo una.En caso de que alguien esté buscando una solución JS pura (usando ES6 en lugar de jQuery), aquí está la que yo uso:
fuente
matches
dos veces también me molesta bastante). +1 para ti :)Creo que primero hay que definir qué significa "más cercano". Si te refieres al nodo descendiente que coincide con tus criterios que está a la distancia más corta en términos de enlaces parentales, entonces usar ": first" o ".eq (0)" no necesariamente funcionará:
En ese ejemplo, el segundo
<span>
elemento ".target" está "más cerca" del "inicio"<div>
, porque está a solo un salto de los padres. Si eso es lo que quiere decir con "más cercano", necesitaría encontrar la distancia mínima en una función de filtro. La lista de resultados de un selector jQuery siempre está en orden DOM.Tal vez:
Es una especie de complemento de pirateo debido a la forma en que construye el objeto resultante, pero la idea es que tienes que encontrar la ruta parental más corta de todos los elementos coincidentes que encuentres. Este código se inclina hacia los elementos hacia la izquierda en el árbol DOM debido a la
<
verificación;<=
sesgaría hacia la derecha.fuente
He preparado esto, no hay implementación para los selectores posicionales (necesitan más que solo
matchesSelector
) todavía:Demostración: http://jsfiddle.net/TL4Bq/3/
Probablemente hay algunos errores, sin embargo, no lo probé mucho.
fuente
La respuesta de Rob W no funcionó del todo para mí. Lo adapté a esto que funcionó.
fuente
.find(filter).first()
, pero más lento;)Usaría lo siguiente para incluir el objetivo en sí mismo si coincide con el selector:
Margen:
fuente
Aunque es un tema antiguo, no pude resistirme a implementar mi niño más cercano. Entrega el primer descendiente encontrado con menos viajes (primero la respiración). Uno es recursivo (favorito personal), otro usa una lista de tareas pendientes sin recurrencia como extensiones jQquery.
Espero que alguien se beneficie.
Nota: El recursivo obtiene desbordamiento de pila, y mejoré el otro, ahora similar a la respuesta anterior dada.
fuente
El siguiente complemento devuelve los enésimos descendientes más cercanos.
fuente
Estaba buscando una solución similar (quería todos los descendientes más cercanos, es decir, amplitud primero + todas las coincidencias independientemente del nivel que exista), esto es lo que terminé haciendo:
Espero que esto ayude.
fuente
Simplemente puedes poner,
fuente
Hay un excelente artículo que señala que lo que requiere el OP se puede lograr fácilmente con los más cercanos [Geeks for Geeks]
1 https://www.geeksforgeeks.org/jquery-closest-with-examples/
fuente
tienes muchas opciones, sin embargo
$("#parent").children(".child");
es el fastet. consulte este artículo para obtener detalles y puntos de referenciafuente