jQuery recorrer - método closest()
Ejemplo
Este ejemplo muestra cómo realizar delegación de eventos utilizando closest(). Cuando se haga clic en el elemento de lista más cercano o en uno de sus descendientes, se cambiará el fondo amarillo:
$( document ).bind("click", function( e ) { $( e.target ).closest("li").toggleClass("hilight"); });
Definición y uso
El método .closest() obtiene el primer elemento ascendiente que coincide con el selector, comenzando desde el elemento actual en el árbol DOM.
Sintaxis
.closest(selector)
Parámetros | Descripción |
---|---|
selector | Valor de cadena que contiene la expresión del selector que coincide con el elemento. |
Descripción detallada
Si se proporciona un objeto jQuery que representa una colección de elementos DOM, el método .closest() nos permite recuperar estos elementos y sus elementos ascendientes en el árbol DOM, y construir un nuevo objeto jQuery con los elementos coincidentes..parents() Al igual que el método .closest(), ambos recorren el árbol DOM hacia arriba. La diferencia entre ellos, aunque sutil, es importante:
.closest() | .parents() |
---|---|
Desde el elemento actual | Desde el elemento padre |
Navega por el árbol DOM hacia arriba hasta encontrar un elemento que coincida con el selector aplicado. | Navega por el árbol DOM hacia arriba hasta que se encuentre con el elemento raíz del documento, añadiendo cada elemento ancestro a una colección temporal; si se ha aplicado un selector, se filtrará esta colección basándose en ese selector. |
Devuelve un objeto jQuery que contiene cero o uno de los elementos | Devuelve un objeto jQuery que contiene cero, uno o varios elementos |
Por favor, vea el siguiente fragmento de HTML:
<ul id="one" class="level-1"> <li class="item-i">I</li> <li id="ii" class="item-ii">II <ul class="level-2"> <li class="item-a">A</li> <li class="item-b">B <ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul> </li> <li class="item-c">C</li> </ul> </li> <li class="item-iii">III</li> </ul>
Ejemplo 1
Supongamos que realizamos una búsqueda desde el proyecto A para el elemento <ul>:
$('li.item-a').closest('ul').css('background-color', 'red');
Esto cambiará el color del <ul> de nivel-2, porque es el primer elemento al que se encuentra al navegar por el árbol DOM hacia arriba.
Ejemplo 2
Supongamos que estamos buscando el elemento <li>:
$('li.item-a').closest('li').css('background-color', 'red');
Esto cambiará el color del proyecto A. Antes de navegar por el árbol DOM hacia arriba, el método .closest() comenzará en el elemento li mismo y buscará hasta que coincida con el proyecto A.
Ejemplo 3
Podemos pasar un elemento DOM como contexto, en el que buscar el elemento más cercano.
var listItemII = document.getElementById('ii'); $('li.item-a').closest('ul', listItemII).css('background-color', 'red'); $('li.item-a').closest('#one', listItemII).css('background-color', 'green');
El código anterior cambiará el color del <ul> de nivel-2, ya que es tanto el primer antepasado <ul> del elemento de lista A como el descendiente del elemento de lista II. No cambiará el color del <ul> de nivel-1, porque no es el descendiente del elemento de lista II.