J'essaye de passer "ceci" d'une étendue cliquée à une fonction jQuery qui peut ensuite exécuter jQuery sur le premier enfant de l'élément cliqué. Je n'arrive pas à faire les choses correctement ...
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
Comment référencer le: premier enfant de l'élément?
jQuery(document).ready(...)
?Réponses:
Si vous souhaitez appliquer un sélecteur au contexte fourni par un ensemble jQuery existant, essayez la fonction find () :
Jørn Schou-Rode a noté que vous ne souhaitiez probablement trouver que le premier descendant direct de l'élément contextuel, d'où le sélecteur d'enfant (>). Il souligne également que vous pourriez tout aussi bien utiliser la fonction children () , qui est très similaire à find () mais ne recherche qu'un niveau au plus profond de la hiérarchie (ce qui est tout ce dont vous avez besoin ...):
la source
find()
recherches dans tous les descendants:first-child
peuvent correspondre à un élément par parent. Par conséquent, cette requête peut renvoyer plusieurs éléments. Ou je me trompe?element.children(":first-child")
ouelement.children().first();
Utilisez la
children
fonction avec le:first
sélecteur pour obtenir le premier enfant unique deelement
:la source
TypeError: Object [object HTMLAnchorElement] has no method 'toggleClass'
J'ai ajouté le test jsperf pour voir la différence de vitesse pour différentes approches pour obtenir le premier enfant (total 1000+ enfants)
donné,
notif = $('#foo')
jQuery façons:
$(":first-child", notif)
- 4304 ops / sec - le plus rapidenotif.children(":first")
- 653 ops / sec - 85% plus lentnotif.children()[0]
- 1416 opérations / sec - 67% plus lentVoies natives:
ele.firstChild
- 4 934 323 ops / sec (toutes les approches ci-dessus sont 100% plus lentes quefirstChild
)notif[0].firstChild
- 4,913,658 ops / secAinsi, les 3 premières approches jQuery ne sont pas recommandées, du moins pour le premier enfant (je doute que ce soit le cas pour beaucoup d'autres aussi). Si vous avez un objet jQuery et que vous devez obtenir le premier enfant, récupérez l'élément DOM natif de l'objet jQuery, en utilisant la référence de tableau
[0]
(recommandé) ou.get(0)
et utilisez leele.firstChild
. Cela donne les mêmes résultats identiques que l'utilisation régulière de JavaScript.tous les tests sont effectués dans Chrome Canary build v15.0.854.0
la source
firstChild
ne donnera pas les mêmes résultats que leschildren()
requêtes jQuery ou sélecteur.firstChild
comprendra des nœuds de texte, ce qui est rarement souhaité. jQuerycontents()
fonction sera les inclure, maischildren()
ne sera pas. Les navigateurs plus récents prennent en chargefirstElementChild
ce qui donnera le premier élément enfant, mais IE <9 ne le prend pas en charge. Donc, si vous utilisez,firstChild
vous devez rechercher manuellement le premier enfant de nœud non textuel.$(":first-child", notif)
devrait être$(":first", notif)
pour le comportement attendu. Le premier retournera tous les descendants du premier élément enfant.Trouvez tous les enfants et prenez le premier.
la source
.children(':first')
.As-tu essayé
Je pense que vous voulez définir votre élément comme contexte pour votre recherche. Il pourrait y avoir une meilleure façon de le faire qu'un autre gourou de jQuery va sauter ici et vous lancer :)
la source
element
a des petits-enfantsJe viens d'écrire un plugin qui utilise
.firstElementChild
si possible, et revient à itérer sur chaque nœud individuel si nécessaire:Ce n'est pas aussi rapide qu'une solution DOM pure, mais dans les tests jsperf sous Chrome 24, c'était deux fois plus rapide que toute autre méthode basée sur le sélecteur jQuery.
la source
document.body
n'est pas encore initialisé, 2) Les performances ne sont bien meilleures que les alternatives si le nombre de nœuds enfants est très élevé. Pour seulement quelques enfants (disons moins de 10 ans),$('>:first-child',context)
c'est un peu plus rapide. Seul le nombre d'enfants affecte la performance, pas la profondeur.document.body
- je vais examiner cela.vous pouvez utiliser DOM
la source
Cela peut être fait avec une magie simple comme celle-ci:
Référence: http://www.snoopcode.com/jquery/jquery-first-child-selector
la source
veuillez l'utiliser comme cette première chose donnez un nom de classe à la balise p comme "myp"
puis utiliser le code suivant
la source
Si vous voulez un premier enfant immédiat dont vous avez besoin
Si vous voulez un premier élément particulier dans le dom de votre élément, utilisez ci-dessous
essayez: http://jsfiddle.net/vgGbc/2/
la source
element
est un nœud DOM, il$(element).first()
est équivalent à$(element)
, pas son premier enfant.