Estou tentando encontrar o elemento mais próximo com um nome de marca específico sem jquery. Quando clico em <th>
, quero ter acesso ao<tbody>
para essa mesa. Sugestões? Eu li sobre deslocamento, mas não entendi muito. Devo apenas usar:
Suponha que já esteja configurado para clicar no elemento
th.offsetParent.getElementsByTagName('tbody')[0]
javascript
caçador
fonte
fonte
parentNode
: developer.mozilla.org/en-US/docs/Web/API/Node.parentNodeel.closest('tbody')
para navegadores não-ie. Veja resposta + polyfill mais elaborada abaixo.Respostas:
Um pouco (muito) atrasado para a festa, mas mesmo assim. Isso deve fazer o truque :
fonte
el
que jQuery.closest () e também Element.closest () fazem.for( var parent = el ; parent !== null && !parent[matchesFn](selector) ; parent = el.parentElement ){ el = parent; } return parent;
parent
no escopo global (!)el.parentNode
ou isso irá falhar ao percorrer um SVG no IE.Muito simples:
Suportado em todos os navegadores, exceto IE.
ATUALIZAR : o Edge agora também oferece suporte.
Não há necessidade de jQuery. Além disso, substituir o jQuery
$(this).closest('tbody')
por$(this.closest('tbody'))
aumentará o desempenho, significativamente quando o elemento não for encontrado.Polyfill para IE:
Observe que não há nenhum
return
quando o elemento não foi encontrado, efetivamente retornandoundefined
quando o elemento mais próximo não foi encontrado.Para obter mais detalhes, consulte: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
fonte
Veja como obter o elemento mais próximo por nome de tag sem jQuery:
fonte
Existe uma função padronizada para fazer isso: Element.closest . A maioria dos navegadores, exceto o IE11, oferece suporte a ele ( detalhes em caniuse.com ). Os documentos MDN também incluem um polyfill no caso de você ter que direcionar os navegadores mais antigos.
Para encontrar o
tbody
pai / mãe mais próximo dado um,th
você pode fazer:Caso você queira escrever a função sozinho - aqui está o que eu criei:
Para encontrar o pai mais próximo pelo nome da tag, você pode usá-lo assim:
fonte
Esta solução usa alguns dos recursos mais recentes da especificação HTML 5, e usá-la em navegadores mais antigos / incompatíveis (leia-se: Internet Explorer) exigirá um polyfill.
fonte
Para estender a resposta @SalmanPK
permitirá usar o nó como seletor, útil ao trabalhar com eventos como mouseover.
fonte
Esta é a função simples que estou usando: -
fonte
Resumo:
Para encontrar um ancestral específico, podemos usar:
Element.closest();
Esta função usa uma string de seletor CSS como argumento. ele então retorna o ancestral mais próximo do elemento atual (ou o próprio elemento) que corresponde ao seletor CSS que foi passado nos argumentos. Se não houver ancestral, ele retornará
null
.Exemplo:
fonte
Obtenha o elemento DOM mais próximo na árvore que contém uma classe, ID, atributo de dados ou tag. Inclui o próprio elemento. Compatível com o IE6.
fonte
firstChar
vez de todasIF
?for
loop obscuro ?Encontre os elementos childNodes mais próximos.
}
fonte
Aqui.
Encontra apenas irmãos mais abaixo na árvore. Use previousSibling para ir para o outro lado Ou use variáveis para percorrer os dois caminhos e retornar o que for encontrado primeiro. Você entendeu a idéia geral, mas se quiser atravessar parentNodes ou children se um irmão não corresponder, você também pode usar jQuery. Nesse ponto, vale facilmente a pena.
fonte
Um pouco tarde para a festa, mas como eu estava passando e respondendo a uma pergunta muito semelhante, deixo aqui minha solução - podemos dizer que é a
closest()
abordagem JQuery , mas em bom e velho JavaScript.Não precisa de pollyfills e é navegadores mais antigos e amigável com o IE (:-)): https://stackoverflow.com/a/48726873/2816279
fonte
Eu acho que o código mais fácil de pegar com jquery mais próximo:
Muito obrigado.
fonte