Esto está lejos de ser óptimo, pero funciona en algunos casos. Puede hacer lo siguiente:
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');
};
Esto devolverá el último selector utilizado para el elemento. Pero no funcionará en elementos no existentes.
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$('#foo').getSelector(); //'#foo'
$('div[id="foo"]').getSelector(); //'div[id="foo"]'
$('#iDoNotExist').getSelector(); // undefined
</script>
Esto funciona con jQuery 1.2.6 y 1.3.1 y posiblemente otras versiones.
también:
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$foo = $('div#foo');
$('#foo').getSelector(); //'#foo'
$foo.getSelector(); //'#foo' instead of 'div#foo'
</script>
Editar
Si marca immidiatly después de que el selector se ha utilizado usted podría utilizar lo siguiente en su plugin:
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);
};
A continuación, el siguiente funcionaría:
<div id='foo'>Select me!</div>
<script type='text/javascript'>
$('div#foo');
$.getLastSelector(); //'#foo'
$('#iDoNotExist');
$.getLastSelector(); // #iDoNotExist'
</script>
En su plugin que podría hacer:
jQuery.fn.myPlugin = function(){
selector = $.getLastSelector;
alert(selector);
this.each(function() {
//do plugins stuff
}
}
$('div').myPlugin(); //alerts 'div'
$('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist'
Pero aún así:
$div = $('div');
$('foo');
$div.myPlugin(); //alerts 'foo'
Incluso si usted puede conseguir al selector inicial, recuerde que podría tener algo como $ (". cat .dog"). parents ("div: first"). find (".parrot"). each (function() {/*...*/}); donde simplemente no tiene un selector simple. – svinto
ese es un punto con el que estoy luchando. posiblemente me esté preguntando sobre cómo atravesar el árbol, pero la mayoría de las veces simplemente obtener el último elemento está bien. normalmente querría hacer algo así como $ ('.cat'). assertNonEmpty(). each (function() {}); –
¿Hay alguna posibilidad de que pueda actualizar a jQuery 1.3.1 y usar "selector"? – Nosredna