Lorsqu'un utilisateur clique sur un élément <li>
ou sur un élément enfant de celui-ci, je souhaite ajouter une classe à cet élément <li>
. Cela fonctionne très bien, mais pour améliorer les performances, j'ai décidé de lier cet événement à l'élément <ul>
, de sorte que la dissociation et la liaison de cet événement sont beaucoup plus rapides dans une liste de 1000 <li>
-éléments. Le seul changement que je pensais avoir à faire était de remplacer this
par event.target
MAIS event.target
peut également faire référence à un élément enfant d'un élément de liste ou même à un petit-enfant.événement.target pointe sur un élément enfant
Existe-t-il un moyen facile de vérifier que cet élément cible fait partie d'un élément de liste ou dois-je parcourir le chemin de event.target
jusqu'à atteindre un élément <li>
?
C'est ce que j'avais avant de décider de lier un événement à la balise <ul>
, qui fonctionne mais pas assez vite:
$('#list li').mousedown(function(){
$(this).addClass('green');
});
Et voici ce que j'ai maintenant qui ne fonctionne pas correctement, mousedown sur un élément enfant ne donne pas <li>
une autre classname:
$('#list').mousedown(function(event){
if(event.target.nodeName == 'LI'){
$(event.target).addClass('green');
}
});
Je me demande si ma deuxième façon d'y parvenir est plus rapide s'il n'y a pas une solution simple pour vérifier si cet élément cible fait partie d'une liste article ...
Ceci est la même chose que '.mousedown()' sauf qu'il accepte aussi les éléments nouvellement créés, ai-je raison? Si c'est le cas, cela ne m'aidera pas, mais j'ai besoin de déconnecter 1000 événements au lieu de 1. – Harmen
Non, ce n'est pas la même chose que ".mousedown()." Vérifiez la documentation - la nouvelle API "live()" fait exactement ce que vous voulez – Pointy
Oh, et notez que l'API "live()" intégrée dans jquery n'est pas la même que l'ancienne extension avec un nom similaire. on lierait en effet directement les gestionnaires d'événements aux éléments, le nouveau profitant du bouillonnement, ce que je vous demande (je crois) – Pointy