33 votes

Comment obtenir l'expression d'un sélecteur jQuery sous forme de texte?

J'ai un sélecteur jQuery, qui a enchaîné fonction.

L'intérieur de la fonction, je veux obtenir l'accès au TEXTE représentant l'expression pour le sélecteur.

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

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

Je l'ai simplifiée dans cet exemple de code que je veux réellement faire. Je suis en train d'écrire un plug-in et j'ai besoin d'accéder au sélecteur pour qui le jeu de fractionnement a été créé. Évidemment, dans cet exemple particulier, j'ai accès à "chien chat" parce que je l'ai écrit. Donc, l'image juste et ce dans un plugin.

Son un peu difficile de google pour cela.

edit: le "sélecteur" la propriété est malheureusement maintenant obsolète. http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects

18voto

Ryan Doherty Points 16448

Il y a un attribut 'selector' dans l'objet jQuery, mais je ne suis pas sûr qu'il soit toujours disponible.

8voto

Pim Jager Points 20018

C'est loin d'être optimal, mais fonctionne dans certains cas. Vous pouvez effectuer les opérations suivantes:

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

Ce sera le retour de la dernière sélecteur utilisé pour l'élément. Mais il ne fonctionnera pas sur non des éléments existants.

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

Cela fonctionne avec jQuery 1.2.6 et 1.3.1 et peut-être d'autres versions.

Aussi:

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

Modifier
Si vous cochez immidiatly après le sélecteur a été utilisé, vous pouvez utiliser les éléments suivants dans votre 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 );
};

Puis la suivante devrait fonctionner:

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

Dans votre plugin que vous pouvez faire:

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

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

Mais encore:

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

3voto

Luca Matteis Points 19338

Si vous utilisez Firebug, vous pouvez console.log(this) à l'intérieur de la fonction et voir si la chaîne de sélection est accessible quelque part dans l'objet. Désolé, je ne connais pas l'API jQuery.

2voto

Zeeshan Points 29

Cela fonctionnera si vous souhaitez accéder à la chaîne de sélection dans votre fonction:

 $(this).html();
 

Cela fonctionnera également si plusieurs sélecteurs sont utilisés,

par exemple,

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

1voto

Haeresis Points 21

Peut-être que cela résout votre problème:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X