Dies ist alles andere als optimal, funktioniert aber in einigen Fällen. Sie könnten Folgendes tun:
jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function(selector, context) {
return (typeof selector === 'string') ? jQuery.fn._init(selector, context).data('selector', selector) : jQuery.fn._init(selector, context);
};
jQuery.fn.getSelector = function() {
return jQuery(this).data('selector');
};
Dies wird den letzten für das Element verwendeten Selektor zurückgeben. Aber es funktioniert nicht mit nicht existierenden Elementen.
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$('#foo').getSelector(); //'#foo'
$('div[id="foo"]').getSelector(); //'div[id="foo"]'
$('#iDoNotExist').getSelector(); // undefined
</script>
Dies funktioniert mit jQuery 1.2.6 und 1.3.1 und möglicherweise anderen Versionen.
auch:
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$foo = $('div#foo');
$('#foo').getSelector(); //'#foo'
$foo.getSelector(); //'#foo' instead of 'div#foo'
</script>
bearbeiten
Wenn Sie immidiatly überprüfen, nachdem die Auswahl verwendet wurde, können Sie die folgenden in Ihrem Plugin verwenden:
jQuery.getLastSelector = function() {
return jQuery.getLastSelector.lastSelector;
};
jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function(selector, context) {
if(typeof selector === 'string') {
jQuery.getLastSelector.lastSelector = selector;
}
return jQuery.fn._init(selector, context);
};
Dann folgendes funktionieren würde:
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$('div#foo');
$.getLastSelector(); //'#foo'
$('#iDoNotExist');
$.getLastSelector(); // #iDoNotExist'
</script>
In Ihrem Plugin können Sie tun:
jQuery.fn.myPlugin = function(){
selector = $.getLastSelector;
alert(selector);
this.each(function() {
//do plugins stuff
}
}
$('div').myPlugin(); //alerts 'div'
$('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist'
Aber noch:
$div = $('div');
$('foo');
$div.myPlugin(); //alerts 'foo'
Auch wenn Sie in die Ausgangswähler zu bekommen, Denke daran, dass du etwas wie $ (". cat .dog") haben könntest. eltern ("div: first"). find (". parrot"). je (function() {/*...*/}); wo Sie einfach keinen einfachen Selektor haben. – svinto
das ist ein Punkt, mit dem ich kämpfe. Ich frage mich vielleicht, ob ich den Baum durchqueren sollte, aber meistens ist es nur in Ordnung, das letzte Element zu bekommen. Normalerweise möchte ich etwas wie $ ('. cat') machen. assertNonEmpty(). je (function() {}); –
Jede Chance, die Sie auf jQuery 1.3.1 aktualisieren und "Selektor" verwenden könnten? – Nosredna