Pregunta

Tengo un selector jQuery, que tiene una función encadenada.

Dentro de la función, quiero obtener acceso al TEXTO que representa la expresión del selector.

$("cat dog").function() {

    // how do I get access to the "cat dog" string from inside THIS function ?
};

He simplificado en exceso en esta muestra de código lo que realmente quiero hacer. Estoy escribiendo un complemento y necesito acceso al selector para el que se creó el conjunto ajustado. Obviamente, en este ejemplo en particular, tengo acceso a & Quot; cat dog & Quot; porque lo escribí. Así que imagínense que esto está en un complemento.

Es un poco complicado para google para esto.

editar: la propiedad 'selector' desafortunadamente ahora está en desuso. http://jquery.com/upgrade-guide/1.9/ # selector-property-on-jquery-objects

¿Fue útil?

Solución

Hay un atributo 'selector' en el objeto jQuery, pero no estoy seguro de que siempre esté disponible.

Otros consejos

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 inmediatamente después de que se haya usado el selector, puede usar lo siguiente en su complemento:

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 );
};

Entonces lo siguiente funcionaría:

<div id='foo'>Select me!</div>
<script type='text/javascript'>
 $('div#foo');
 $.getLastSelector(); //'#foo'
 $('#iDoNotExist');
 $.getLastSelector(); // #iDoNotExist'
</script>

En su complemento puede 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'

Si está utilizando firebug, podría console.log(this) dentro de la función y ver si se puede acceder a la cadena del selector en algún lugar del objeto. Lo siento, no estoy familiarizado con la API jQuery.

Esto funcionará si desea acceder a la cadena de selección en su función:

$(this).html();

Esto también funcionará si se usan múltiples selectores,

por ejemplo,

$('#id1,#id2').click(function(){
   alert($(this).html());
});

Tal vez esto resuelva su problema:

var $jqueryItems = $( ".my-selector" );
console.log( $jqueryItems.selector ); // display ".my-selector"

Para aquellos que desean ingresar a la cadena de selección de complementos dada a jQuery, me complace haber mejorado la excelente respuesta dada por @Pim Jager:

  1. A partir de ahora (última versión 3.2.1) hay 3 argumentos en jQuery.fn.init función - selector, context, root - no dos;
  2. La palabra clave
  3. new debe agregarse a la declaración de devolución de $(this).getSelector();;
  4. Dentro de su complemento, los selectores se devuelven como una cadena al llamar <=>

Finalmente, eso es lo que tengo que trabajar para mí como un encanto:

(function($, window, document, undefined) { 
    $.fn._init = $.fn.init
    $.fn.init = function( selector, context, root ) {
        return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init( selector, context, root );
    };
    $.fn.getSelector = function() {
        return $(this).data('selector');
    };
    $.fn.YOUR-PLUGIN = function() {
        var selector = $(this).getSelector(); // selectors string given to jQuery 
        // other code
    }
})(jQuery, window, document);

Funciona con versiones de jQuery en lo que a mí respecta (de 1.7.0 a 3.2.1).

PS . Funciona bien incluso con jQuery 1.2.3 disponible aquí también en stackoverflow. Entonces, supongo, lo siguiente está bien para todas las versiones de jQuery si desea obtener la expresión de un selector de jQuery como texto dentro del complemento:

// our plugin
(function($, window, document, undefined) { 
    $.fn._init = $.fn.init
    $.fn.init = function( selector, context, root ) {
        return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init( selector, context, root );
    };
    $.fn.getSelector = function() {
        return $(this).data('selector');
    };
    $.fn.coolPlugin = function() {
        var selector = $(this).getSelector(); 
        if(selector) console.log(selector); // outputs p #boldText
    }
})(jQuery, window, document);

// calling plugin
$(document).ready(function() {
    $("p #boldText").coolPlugin();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<p>some <b id="boldText">bold text</b></p>

No pude averiguar cómo obtener la referencia al valor de cadena del selector proporcionado dentro de $ ('value_i_want_here') cuando está vinculado a una función; Parece un problema difícil. Sin embargo, si prefiere probar en IE [x] siempre hay Firebug Lite que funciona muy bien utilizando console.log (var | val).

bueno, ¿todavía estoy tratando de averiguar si estás tratando de obtener el nombre del elemento? o la identificación y / o clase o todo.

Puedes obtener un elemento con esto

var element =$(this).get(0);
var id = $(this).attr('id');
var class=$(this).attr('class');

no estoy seguro de lo que sucede si tienes más de una clase. podría entrar en una matriz o algo así, y podría obtener eso con los índices.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top