::
WARNUNG :: .selector ist ab Version 1.7 veraltet und ab Version 1.9 entfernt
Das jQuery-Objekt hat eine Selector-Eigenschaft, die ich gestern beim Eingraben seines Codes gesehen habe. Ich weiß nicht, ob es in den Dokumenten definiert ist, wie zuverlässig es ist (für die Zukunftssicherung). Aber es funktioniert!
$('*').selector // returns *
Bearbeiten : Wenn Sie den Selektor innerhalb des Ereignisses finden, sollten diese Informationen idealerweise Teil des Ereignisses selbst und nicht des Elements sein, da einem Element mehrere Klickereignisse über verschiedene Selektoren zugewiesen werden können. Eine Lösung wäre, einen Wrapper zu verwenden bind()
, click()
um Ereignisse usw. hinzuzufügen, anstatt sie direkt hinzuzufügen.
jQuery.fn.addEvent = function(type, handler) {
this.bind(type, {'selector': this.selector}, handler);
};
Der Selektor wird als Eigenschaft eines Objekts mit dem Namen übergeben selector
. Greifen Sie als zu event.data.selector
.
Versuchen wir es mit einem 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
});
Haftungsausschluss : Beachten Sie, dass live()
die Selector-Eigenschaft genau wie bei Ereignissen ungültig sein kann, wenn DOM-Traversal-Methoden verwendet werden.
<div><a>a link</a></div>
Der folgende Code funktioniert NICHT, da er live
von der Selector-Eigenschaft abhängt, die in diesem Fall a.parent()
ein ungültiger Selector ist.
$('a').parent().live(function() { alert('something'); });
Unsere addEvent
Methode wird ausgelöst, aber auch Sie werden den falschen Selektor sehen - a.parent()
.