:: AVERTISSEMENT ::
.selector est obsolète depuis la version 1.7, supprimé depuis la 1.9
L'objet jQuery a une propriété de sélecteur que j'ai vue en creusant dans son code hier. Je ne sais pas si elle est définie dans la documentation et à quel point elle est fiable (pour une épreuve future). Mais ça marche!
$('*').selector // returns *
Modifier : Si vous deviez trouver le sélecteur à l'intérieur de l'événement, ces informations devraient idéalement faire partie de l'événement lui-même et non de l'élément, car un élément pourrait avoir plusieurs événements de clic attribués via divers sélecteurs. Une solution serait d'utiliser un wrapper autour bind(), click()etc. pour ajouter des événements au lieu de l'ajouter directement.
jQuery.fn.addEvent = function(type, handler) {
this.bind(type, {'selector': this.selector}, handler);
};
Le sélecteur est passé en tant que propriété d'un objet nommé selector. Accédez-y en tant que event.data.selector.
Essayons-le sur un balisage ( http://jsfiddle.net/DFh7z/ ):
<p class='info'>some text and <a>a link</a></p>
$('p a').addEvent('click', function(event) {
alert(event.data.selector); // p a
});
Avertissement : N'oubliez pas que, tout comme pour les live()événements, la propriété selector peut être invalide si les méthodes de traversée DOM sont utilisées.
<div><a>a link</a></div>
Le code ci-dessous ne fonctionnera PAS, car il liverepose sur la propriété selector qui dans ce cas est a.parent()- un sélecteur invalide.
$('a').parent().live(function() { alert('something'); });
Notre addEventméthode se déclenchera, mais vous verrez vous aussi le mauvais sélecteur - a.parent().