nœud ancêtre le plus proche dans jQuery
Dans mon javascript expérience, j'ai trouvé que c'est un très commun de la tâche "la recherche de l'ancêtre le plus proche d'un élément avec une condition (nom de la balise, classe,...)".
Pouvez les parents() de jquery faire le travail? L'ordre des éléments retournés de parents() est prévisible? Est de haut en bas ou de bas en haut?
Pour le moment j'utilise cette fonction d'utilité:
function ancestor(elem, selector) {
var $elem = $( elem ).parent();
while( $elem.size() > 0 ) {
if( $elem.is( selector ) )
return $elem;
else
$elem = $elem.parent();
}
return null;
}
Quelqu'un peut me dire si il existe un moyen astucieux pour faire le travail?
source d'informationauteur Pier Luigi
Vous devez vous connecter pour publier un commentaire.
Modifier: Depuis jQuery 1.3, ce qui a été construit dans le
plus proche()
fonction. par exemple:$('#foo').closest('.bar');
yep - parents() parcourt l'arbre.
$('#d').parents("div:first");
sélectionnera div b.L'ajout de @nickf's réponse:
jQuery 1.3 simplifyed cette tâche avec
closest
.Donné un DOM:
Que vous pouvez faire:
Vous devez utiliser
closest
parce queparents
ne vous donne pas le résultat que vous attendez si vous travaillez avec plusieurs éléments. Par exemple, disons que vous avez ceci:et vous souhaitez ajouter une classe à la balise div qui ont un
<b>
de l'élément de leur environnement immédiat de l'enfant (c'est à dire, 1 et 3). Si vous utilisez$('b').parents('div')
vous obtenez les divs 0, 1 et 3. Si vous utilisez$('b').parents('div:first')
vous obtenez seulement div 1. Pour obtenir 1 et 3, mais pas 0, vous devez utiliser$('b').closest(elem)
.plus proche() commence à l'élément en cours, si le parent que vous êtes à la recherche pour a la balise courante (par exemple. les deux sont des divs), utilisez parent().la plus proche()