jQuery Navegação - método closest()
Exemplo
Este exemplo demonstra como usar o closest() para delegação de eventos. Quando o elemento da lista mais próximo ou seus descendentes são clicados, a cor de fundo amarela será alternada:
$( document ).bind("click", function( e ) { $( e.target ).closest("li").toggleClass("hilight"); });
Definição e uso
O método .closest() obtém o primeiro elemento ancestral que coincide com o seletor, começando do elemento atual no árvore DOM.
Sintaxe
.closest(selector)
Parâmetro | Descrição |
---|---|
selector | Valor de string, contendo a expressão do seletor que coincide com o elemento. |
Explicação detalhada
Se fornecido um objeto jQuery que representa uma coleção de elementos DOM, o método .closest() nos permite recuperar esses elementos no árvore DOM e seus elementos ancestrais, criando um novo objeto jQuery com os elementos correspondentes..parents() Muito parecido com o método .closest(), ambos navegam pelo árvore DOM para cima. A diferença entre eles, embora sutil, é importante:
.closest() | .parents() |
---|---|
Começa a partir do elemento atual | Começa a partir do elemento pai |
Navega pelo árvore DOM para cima até encontrar um elemento que correspondente ao seletor aplicado. | Navega pelo árvore DOM para cima até o elemento raiz do documento, adicionando cada elemento ancestral a uma coleção temporária; se um seletor foi aplicado, a coleção será filtrada com base no seletor. |
Retorna um objeto jQuery que contém zero ou um elemento | Retorna um objeto jQuery que contém zero, um ou vários elementos |
Por favor, veja o fragmento HTML abaixo:
<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>
Exemplo 1
Suponha que executemos uma busca no elemento <ul> começando pelo item A:
$('li.item-a').closest('ul').css('background-color', 'red');
Isso mudará a cor do <ul> level-2, pois ao percorrer a árvore DOM, o elemento é encontrado primeiro.
Exemplo 2
Suponha que estejamos procurando o elemento <li>:
$('li.item-a').closest('li').css('background-color', 'red');
Isso mudará a cor do item da lista A. Antes de percorrer a árvore DOM, o método .closest() começa a procurar a partir do elemento li até que o seletor encontre o item A.
Exemplo 3
Podemos passar um elemento DOM como contexto, onde procuramos o elemento mais próximo.
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');
O código acima mudará a cor do <ul> level-2, pois ele é tanto o ancestral direto do item A quanto o descendente do item II. Ele não mudará a cor do <ul> level-1, pois não é descendente do item II.