:: 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 live
repose sur la propriété selector qui dans ce cas est a.parent()
- un sélecteur invalide.
$('a').parent().live(function() { alert('something'); });
Notre addEvent
méthode se déclenchera, mais vous verrez vous aussi le mauvais sélecteur - a.parent()
.