Eu estou tentando passar "this" de um período clicado para uma função jQuery que pode executar o jQuery no primeiro filho desse elemento clicado. Não consigo acertar ...
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
Como faço para referenciar o: primeiro filho do elemento?
jQuery(document).ready(...)
?Respostas:
Se você deseja aplicar um seletor ao contexto fornecido por um conjunto jQuery existente, tente a função find () :
Jørn Schou-Rode observou que você provavelmente só deseja encontrar o primeiro descendente direto do elemento de contexto, daí o seletor filho (>). Ele também aponta que você também pode usar a função children () , que é muito semelhante a find (), mas apenas pesquisa um nível profundo na hierarquia (que é tudo que você precisa ...):
fonte
find()
buscas em todos os descendentes e:first-child
podem corresponder a um elemento por pai. Portanto, é provável que essa consulta retorne vários elementos. Ou estou enganado?element.children(":first-child")
ouelement.children().first();
Use a
children
função com o:first
seletor para obter o primeiro filho único deelement
:fonte
TypeError: Object [object HTMLAnchorElement] has no method 'toggleClass'
Eu adicionei JSPerf teste para ver a diferença de velocidade para diferentes abordagens para obter o primeiro filho (total 1000 crianças)
dado,
notif = $('#foo')
Maneiras jQuery:
$(":first-child", notif)
- 4.304 ops / s - mais rápidonotif.children(":first")
- 653 ops / s - 85% mais lentonotif.children()[0]
- 1.416 ops / s - 67% mais lentoManeiras nativas:
ele.firstChild
- 4.934.323 ops / s (todas as abordagens acima são 100% mais lentas em comparação comfirstChild
)notif[0].firstChild
- 4.913.658 ops / sPortanto, as três primeiras abordagens do jQuery não são recomendadas, pelo menos para o primeiro filho (duvido que seja o caso de muitas outras também). Se você tiver um objeto jQuery e precisar obter o primeiro filho, obtenha o elemento DOM nativo do objeto jQuery, usando a referência de matriz
[0]
(recomendado) ou.get(0)
use oele.firstChild
. Isso fornece os mesmos resultados idênticos aos do uso regular do JavaScript.todos os testes são feitos no Chrome Canary build v15.0.854.0
fonte
firstChild
não fornecerá os mesmos resultados que aschildren()
consultas do jQuery ou do seletor.firstChild
incluirá nós de texto que raramente são desejados. Acontents()
função do jQuery irá incluí-los, maschildren()
não o fará. Navegadores mais novos suportam ofirstElementChild
que fornecerá o primeiro elemento filho, mas o IE <9 não o suporta. Portanto, se você usar,firstChild
precisará localizar manualmente o primeiro filho do nó que não é de texto.$(":first-child", notif)
deve ser$(":first", notif)
para o comportamento esperado. O primeiro retornará todos os descendentes de elementos do primeiro filho.Encontre todas as crianças e obtenha primeiro.
fonte
.children(':first')
.Você tentou
Eu acho que você deseja definir seu elemento como um contexto para sua pesquisa. Pode haver uma maneira melhor de fazer isso, que algum outro guru do jQuery entrará aqui e jogará fora em você :)
fonte
element
tem netosAcabei de escrever um plugin que usa,
.firstElementChild
se possível, e volta a iterar sobre cada nó individual, se necessário:Não é tão rápido quanto uma solução DOM pura, mas nos testes do jsperf no Chrome 24, foram duas ordens de magnitude mais rápidas do que qualquer outro método baseado no seletor do jQuery.
fonte
document.body
ainda não foi inicializado; 2) O desempenho é muito melhor do que as alternativas se o número de nós filhos for muito alto. Para apenas algumas crianças (digamos menos de 10), o$('>:first-child',context)
é um pouco mais rápido. Somente o número de filhos afeta o desempenho, não a profundidade.document.body
- eu vou olhar para isso.você pode usar o DOM
fonte
Isso pode ser feito com uma mágica simples como esta:
Referência: http://www.snoopcode.com/jquery/jquery-first-child-selector
fonte
use-o como esta primeira coisa, dê um nome de classe para marcar p como "myp"
em seguida, use o seguinte código
fonte
Se você quer o primeiro filho imediato, precisa
Se você deseja um primeiro elemento específico no dom do seu elemento, use abaixo
experimente: http://jsfiddle.net/vgGbc/2/
fonte
element
é um nó DOM, então$(element).first()
é equivalente$(element)
, e não seu primeiro filho.