Estoy tratando de pasar "esto" de un intervalo de clics a una función jQuery que luego puede ejecutar jQuery en el primer elemento secundario de ese elemento cliqueado. Parece que no puedo hacerlo bien ...
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
¿Cómo hago referencia al elemento: first-child of?
jQuery(document).ready(...)
?Respuestas:
Si desea aplicar un selector al contexto proporcionado por un conjunto jQuery existente, pruebe la función find () :
Jørn Schou-Rode señaló que probablemente solo desee encontrar el primer descendiente directo del elemento de contexto, de ahí el selector secundario (>). También señala que también podría usar la función children () , que es muy similar a find () pero solo busca un nivel en la jerarquía (que es todo lo que necesita ...):
fuente
find()
busca en todos los descendientes y:first-child
puede coincidir con un elemento por padre. Por lo tanto, esta consulta puede devolver varios elementos. ¿O me equivoco?element.children(":first-child")
oelement.children().first();
Use la
children
función con el:first
selector para obtener el primer hijo único deelement
:fuente
TypeError: Object [object HTMLAnchorElement] has no method 'toggleClass'
He agregado la prueba jsperf para ver la diferencia de velocidad para diferentes enfoques para obtener el primer hijo (un total de más de 1000 niños)
dado,
notif = $('#foo')
Formas jQuery:
$(":first-child", notif)
- 4,304 operaciones / seg - más rápidonotif.children(":first")
- 653 operaciones / seg. - 85% más lentonotif.children()[0]
- 1,416 operaciones / seg. - 67% más lentoManeras nativas:
ele.firstChild
: 4.934.323 operaciones / segundo (todos los enfoques anteriores son 100% más lentos en comparación confirstChild
)notif[0].firstChild
- 4,913,658 operaciones / seg.Por lo tanto, no se recomiendan los primeros 3 enfoques jQuery, al menos para el primer hijo (dudo que ese sea el caso con muchos otros también). Si tiene un objeto jQuery y necesita obtener el primer hijo, obtenga el elemento DOM nativo del objeto jQuery, utilizando la referencia de matriz
[0]
(recomendado) o.get(0)
use elele.firstChild
. Esto proporciona los mismos resultados idénticos que el uso regular de JavaScript.todas las pruebas se realizan en Chrome Canary build v15.0.854.0
fuente
firstChild
no dará los mismos resultados que laschildren()
consultas de jQuery o del selector.firstChild
incluirá nodos de texto que rara vez se desea. jQuerycontents()
función se incluyen, perochildren()
no lo hará. Los navegadores más nuevos admitenfirstElementChild
lo que dará el primer elemento hijo, pero IE <9 no lo admite. Entonces, si lo usafirstChild
, tiene que encontrar manualmente el primer nodo secundario que no es de texto.$(":first-child", notif)
debe ser$(":first", notif)
por el comportamiento esperado. El primero devolverá todos los descendientes del primer elemento secundario.Encuentre a todos los niños y obtenga el primero de ellos.
fuente
.children(':first')
.Has probado
Creo que desea establecer su elemento como contexto para su búsqueda. Puede haber una mejor manera de hacer esto que algún otro gurú de jQuery saltará aquí y te arrojará :)
fuente
element
tiene nietosAcabo de escribir un complemento que usa
.firstElementChild
si es posible, y recurre a iterar sobre cada nodo individual si es necesario:No es tan rápido como una solución DOM pura, pero en las pruebas jsperf en Chrome 24 fue un par de órdenes de magnitud más rápido que cualquier otro método basado en el selector jQuery.
fuente
document.body
aún no se ha inicializado, 2) El rendimiento solo es mucho mejor que las alternativas si el número de nodos secundarios es muy alto. Para solo unos pocos niños (digamos menos de 10)$('>:first-child',context)
es un poco más rápido. Solo el número de niños afecta el rendimiento, no la profundidad.document.body
- Lo investigaré.puedes usar DOM
fuente
Esto se puede hacer con una magia simple como esta:
Referencia: http://www.snoopcode.com/jquery/jquery-first-child-selector
fuente
úsalo como esto primero, dale un nombre de clase a la etiqueta p como "myp"
luego en usar el siguiente código
fuente
Si quieres un primer hijo inmediato, necesitas
Si desea un primer elemento particular en el dom de su elemento, use a continuación
probar: http://jsfiddle.net/vgGbc/2/
fuente
element
es un nodo DOM,$(element).first()
es equivalente a$(element)
, no su primer hijo.