web-dev-qa-db-fra.com

Obtenir la chaîne de sélecteur jQuery actuelle?

Lorsque j'appelle un plugin personnalisé, comment puis-je obtenir la chaîne de sélecteur actuelle?

$('my_selector p').my_plugin();

Voudrais sortir my_selector p dans mon script. Comment puis-je accéder à cette chaîne?

22
Richard Testani

Vous pouvez utiliser selector property:

$('my_selector p').selector // my_selector p

version obsolète: 1.7, supprimé: 1.9

35
Sarfraz

Poste obsolète désapprobation v. 1.7:

Si vous utilisez uniquement des identifiants et des classes en tant que sélecteurs, vous pouvez utiliser les éléments suivants:

var selector = (typeof($(this).attr('id')) !== 'undefined' || $(this).attr('id') !== null) ? '#' + $(this).attr('id') :  '.' + $(this).attr('class');

Il existe des moyens plus propres, mais depuis la suppression de .selector en raison de son incohérence entre les navigateurs depuis la version 1.7, cela a été mon préféré.

13
tibc-dev

Étant déconseillé, le conseil officiel est d’ajouter le sélecteur en tant que paramètre dans votre appel de fonction: https://api.jquery.com/selector/

Les plugins qui doivent utiliser une chaîne de sélecteur dans leur plugin peuvent en avoir besoin en tant que paramètre de la méthode. Par exemple, un plugin "foo" pourrait être écrit comme

$.fn.foo = function( selector, options ) { /* plugin code goes here */ };

et la personne utilisant le plugin écrirait

$( "div.bar" ).foo( "div.bar", {dog: "bark"} );

Redondant, oui, mais toujours fiable.

2
kevinmicke

Avec secteur obsolète j'utilise

index = document.getElementById('category').value
select = $("#category option[value=#{index}]")[0].innerHTM

juste deux lignes de code

ou si vous êtes vraiment pas cher avec des lignes 

select = $("#category option[value=#{document.getElementById('category').value}]")[0].innerHTML
1
bobbdelsol
jQuery.fn.getSelector = function() {
        return this.data('selector');
};
1
wtrevino

Le meilleur workaroud est 

function mySelector(selector) {
    return $.extend($(selector),{"selector":selector});
}

cela retourne l'objet jquery classique comme $ () le ferait

mySelector(".myClass")

et cela retourne la chaîne du sélecteur

mySelector(".myClass").selector
0
EvroMalarkey

Extension à la commande answer de kevinmicke: vous pouvez obtenir dans votre objet événement le sélecteur que vous transmettez aux fonctions de rappel.

Dans les fonctions de rappel

event.handleObj.selector

Exemple:

Vous obtiendrez la chaîne de sélecteur danse.handleObj.selector

    $( '.container' )
    .on('change', 'select.mySelector', function (e) {
        console.log(JSON.stringify(e));
        $('.selector').text(e.handleObj.selector);
        $('.value').text($(this).val());
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">

  <select class="mySelector">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </select>
  <h3>Your Selector: <span class="selector"></span></h3>
  <h3>Selected Value: <span class="value"></span></h3>
  
</div>

Le journal de la console donne un objet comme celui-ci:

{
    // ...skipped lines
    "handleObj": {
        "type": "change",
        "origType": "change",
        "guid": 1,
        "selector": "select.mySelector",
        "needsContext": false,
        "namespace": ""
    }
}
0
Imtiaz