Existe uma função semelhante a jQuery
.closest()
mas para atravessar descendentes e retornar apenas os mais próximos?
Eu sei que existe .find()
função, mas ele retorna todas as correspondências possíveis, não as mais próximas.
Editar:
Aqui está a definição de mais próximo (pelo menos para mim) :
Em primeiro lugar, todas as crianças são atravessadas, depois as crianças de cada indivíduo são atravessadas.
No exemplo abaixo, id='2'
estão os .closest
descendentes mais próximos 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, veja o link JSfiddle .
.find("filter here").eq(0)
?:first
filtro?Respostas:
De acordo com a sua definição de
closest
, escrevi o seguinte plugin:fonte
.closest()
função jQuery , ela também corresponde ao elemento em que foi chamada. Veja meu jsfiddle . Alterando-o para$currentSet = this.children(); // Current place
ele vai começar com ele os filhos em vez jsFiddleSe por descendente "mais próximo" você quer dizer o primeiro filho, pode:
Ou:
Ou, para procurar a primeira ocorrência de um elemento específico, você pode fazer:
Ou:
Realmente, porém, precisamos de uma definição sólida do que significa "descendente mais próximo".
Por exemplo
Que
<span>
iria$('#foo').closestDescendent('span')
voltar?fonte
$('#foo').find('.whatever').first();
é "em largura" ou "em profundidade"Você pode usar
find
com o:first
seletor:A linha acima encontrará o primeiro
<p>
elemento nos descendentes de#parent
.fonte
find('whatever:first')
.E essa abordagem?
Esse seletor "filho direto" funciona para mim.
fonte
Solução JS pura (usando ES6).
Exemplo
Considerando a seguinte estrutura:
Mostrar snippet de código
fonte
while
expressão com efeitos colaterais. 2) Uso da.matches
verificação em duas linhas, em vez de apenas uma.Caso alguém esteja procurando por uma solução JS pura (usando ES6 em vez de jQuery), eis a que eu uso:
fonte
matches
duas vezes também me irrita um pouco). + 1 para você :) #Eu acho que primeiro você precisa definir o que significa "mais próximo". Se você quer dizer que o nó descendente que corresponde aos seus critérios está a menor distância em termos de links dos pais, usar ": first" ou ".eq (0)" não funcionará necessariamente:
Nesse exemplo, o segundo
<span>
elemento ".target" está "mais próximo" do "start"<div>
, porque fica a apenas um salto dos pais. Se é isso que você quer dizer com "mais próximo", você precisa encontrar a distância mínima em uma função de filtro. A lista de resultados de um seletor jQuery está sempre na ordem DOM.Talvez:
Esse é um plug-in de hackers, devido à maneira como ele cria o objeto de resultado, mas a idéia é que você precisa encontrar o caminho mais curto dos pais entre todos os elementos correspondentes que encontrar. Esse código é direcionado para os elementos à esquerda na árvore DOM devido à
<
verificação;<=
viés para a direita.fonte
Eu preparei isso, nenhuma implementação para seletores de posição (eles precisam de mais do que apenas
matchesSelector
) ainda:Demonstração: http://jsfiddle.net/TL4Bq/3/
Provavelmente existem alguns erros, mas não o testaram muito.
fonte
A resposta de Rob W não funcionou muito bem para mim. Eu o adaptei a isso que funcionou.
fonte
.find(filter).first()
, apenas mais lento;)Eu usaria o seguinte para incluir o próprio destino se corresponder ao seletor:
Marcação:
fonte
Mesmo que seja um tópico antigo, não pude resistir à implementação do mais próximo da minha criança. Entrega o primeiro descendente encontrado com menos deslocamento (respiração primeiro). Um é recursivo (favorito pessoal), outro usa uma lista de tarefas, portanto sem recursão como extensões do jQquery.
Espero que alguém se beneficie.
Nota: O recursivo obtém um estouro de pilha e eu melhorei o outro, agora semelhante à resposta anterior fornecida.
fonte
O seguinte plugin retorna os enésimos enésimos descendentes mais próximos.
fonte
Eu estava procurando por uma solução semelhante (queria todos os descendentes mais próximos, ou seja, a amplitude primeiro + todas as correspondências, independentemente do nível em que ela existe), eis o que acabei fazendo:
Eu espero que isso ajude.
fonte
Você pode simplesmente colocar,
fonte
Há um excelente artigo que aponta que o que o OP exige pode ser alcançado facilmente com o mais próximo [Geeks for Geeks]
1 https://www.geeksforgeeks.org/jquery-closest-with-examples/
fonte
você tem muitas opções, porém
$("#parent").children(".child");
é o fastet. consulte este artigo para obter detalhes e referênciasfonte