Domanda

Ho un selettore jQuery, che ha una funzione concatenata.

All'interno della funzione voglio accedere al TEXT che rappresenta l'espressione per il selettore.

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

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

Ho semplificato in questo esempio di codice ciò che realmente voglio fare. Sto scrivendo un plug-in e ho bisogno di accedere al selettore per il quale è stato creato il set. Ovviamente in questo esempio particolare ho accesso a & Quot; cat dog & Quot; perché l'ho scritto. Quindi immagina di essere in un plugin.

Per Google è un po 'complicato.

modifica: la proprietà 'selettore' è purtroppo ora obsoleta. http://jquery.com/upgrade-guide/1.9/ # selettore-proprietà-on-jquery-oggetti

È stato utile?

Soluzione

C'è un attributo 'selector' nell'oggetto jQuery, ma non sono sicuro che sia sempre disponibile.

Altri suggerimenti

Questo è tutt'altro che ottimale ma funziona in alcuni casi. Puoi fare quanto segue:

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

Questo restituirà l'ultimo selettore utilizzato per l'elemento. Ma non funzionerà su elementi inesistenti.

<div id='foo'>Select me!</div>
<script type='text/javascript'>
 $('#foo').getSelector(); //'#foo'
 $('div[id="foo"]').getSelector(); //'div[id="foo"]'
 $('#iDoNotExist').getSelector(); // undefined
</script>

Funziona con jQuery 1.2.6 e 1.3.1 e possibilmente con altre versioni.

Inoltre:

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

Modifica
Se controlli immediatamente dopo aver utilizzato il selettore, puoi utilizzare quanto segue nel tuo 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 );
};

Quindi funzionerebbe quanto segue:

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

Nel tuo plugin puoi fare:

jQuery.fn.myPlugin = function(){
 selector = $.getLastSelector;
 alert(selector);
 this.each( function() {
  //do plugins stuff
 }
}

$('div').myPlugin(); //alerts 'div'
$('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist'

Ma comunque:

$div = $('div');
$('foo');
$div.myPlugin(); //alerts 'foo'

Se stai usando firebug potresti console.log(this) all'interno della funzione e vedere se la stringa del selettore è accessibile da qualche parte nell'oggetto. Spiacenti, non ho familiarità con l'API jQuery.

Funzionerà se si desidera accedere alla stringa di selezione nella propria funzione:

$(this).html();

Funzionerà anche se si utilizzano più selettori,

ad esempio,

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

Forse questo risolve il tuo problema:

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

Per coloro che vogliono entrare nella propria stringa di selezione dei plugin fornita a jQuery, sono felice di aver migliorato la risposta eccezionale data da @Pim Jager:

  1. A partire da ora (ultima versione 3.2.1) ci sono 3 argomenti in jQuery.fn.init funzione - selector, context, root - non due;
  2. La parola chiave
  3. new deve essere aggiunta all'istruzione return di $(this).getSelector();;
  4. All'interno del plug-in i selettori vengono restituiti come stringa chiamando <=>

Infine, è quello che devo lavorare per me come un incantesimo:

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

Funziona con le versioni di jQuery per quanto mi riguarda (dall'1.7.0 al 3.2.1).

PS . Funziona bene anche con jQuery 1.2.3 disponibile anche qui su StackOverflow. Quindi, suppongo, quanto segue va bene per tutte le versioni di jQuery se si desidera ottenere un'espressione del selettore jQuery come testo all'interno del plug-in:

// 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>

Non sono riuscito a capire come ottenere il riferimento al valore di stringa del selettore fornito all'interno di $ ('value_i_want_here') quando associato a una funzione; sembra un problema difficile. Tuttavia, se preferisci i test in IE [x] c'è sempre Firebug Lite che funziona davvero bene utilizzando console.log (var | val).

bene, sto ancora cercando di capire se stai cercando di ottenere il nome dell'elemento? o l'id e / o la classe o tutto il resto.

Puoi ottenere elementi con questo

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

non sono sicuro di cosa succede se hai più di una classe. potrebbe andare in un array o qualcosa del genere e potresti ottenerlo con gli indici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top