:: WARNING ::
.selector è stato deprecato dalla versione 1.7, rimossa dalla 1.9
L'oggetto jQuery ha una proprietà selector che ho visto ieri durante lo scavo nel suo codice. Non so se è definito nei documenti quanto sia affidabile (per prove future). Ma funziona!
$('*').selector // returns *
Modifica : se dovessi trovare il selettore all'interno dell'evento, tali informazioni dovrebbero idealmente far parte dell'evento stesso e non dell'elemento perché un elemento potrebbe avere più eventi di clic assegnati tramite vari selettori. Una soluzione potrebbe essere quella di utilizzare un wrapper per around bind()
, click()
ecc. Per aggiungere eventi invece di aggiungerlo direttamente.
jQuery.fn.addEvent = function(type, handler) {
this.bind(type, {'selector': this.selector}, handler);
};
Il selettore viene passato come proprietà di un oggetto denominata selector
. Accedi comeevent.data.selector
.
Proviamolo su qualche markup ( 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
});
Dichiarazione di non responsabilità : ricorda che, proprio come per gli live()
eventi, la proprietà selector potrebbe non essere valida se vengono utilizzati metodi di attraversamento DOM.
<div><a>a link</a></div>
Il codice seguente NON funzionerà, poiché live
si basa sulla proprietà selector che in questo caso è a.parent()
- un selettore non valido.
$('a').parent().live(function() { alert('something'); });
Il nostro addEvent
metodo verrà attivato, ma anche tu vedrai il selettore sbagliato - a.parent()
.