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?
Vous pouvez utiliser selector
property:
$('my_selector p').selector // my_selector p
version obsolète: 1.7
, supprimé: 1.9
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é.
É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.
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
jQuery.fn.getSelector = function() {
return this.data('selector');
};
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
Extension à la commande answer de kevinmicke: vous pouvez obtenir dans votre objet événement le sélecteur que vous transmettez aux fonctions de rappel.
event.handleObj.selector
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": ""
}
}