Obtenir initial sélecteur à l'intérieur de plugin jquery
J'ai eu de l'aide plus tôt concernant les sélecteurs, mais je suis coincé avec celui-ci.
Disons que vous avez un plugin comme celui-ci
$('#box').customplugin();
comment puis-je obtenir le n ° de la boîte comme une chaîne de caractères dans le plugin?
Vous ne savez pas si c'est la bonne manière de faire, et de toute autre solution serait très bien aussi.
Considérant #est une boîte sélectionnez le menu déroulant,
Le problème, je vais avoir, c'est si je ne l'ordinaire javascript
$('#box').val(x);
La bonne valeur de l'option est sélectionné,
mais si j'essaie la même chose à l'intérieur d'un plugin
.....
this.each(function() {
var $this = $(this);
$this.val(x);
le dernier code n'a pas vraiment quoi que ce soit.
Je remarque que je vais avoir de la difficulté à cibler #zone à l'intérieur du plugin parce que c'est un objet et non pas une chaîne...
Toute aide serait appréciée.
Merci!
Edit:: Mettre dans le code, je travaille pour une meilleure compréhension
(function($){
$.fn.customSelect = function(options) {
var defaults = {
myClass : 'mySelect'
};
var settings = $.extend({}, defaults, options);
this.each(function() {
//Var
var $this = $(this);
var thisOpts = $('option',$this);
var thisSelected = $this[0].selectedIndex;
var options_clone = '';
$this.hide();
options_clone += '<li ><span>'+thisOpts[thisSelected].text+'</span><ul>'
for (var index in thisOpts) {
//Check to see if option has any text, and that the value is not undefined
if(thisOpts[index].text && thisOpts[index].value != undefined) {
options_clone += '<li pln"> + thisOpts[index].value + '"><span>' + thisOpts[index].text + '</span></li>'
}
}
options_clone += '</ul></li>';
var mySelect = $('<ul class="' + settings.myClass + '">').html(options_clone); //Insert Clone Options into Container UL
$this.after(mySelect); //Insert Clone after Original
var selectWidth = $this.next('ul').find('ul').outerWidth(); //Get width of dropdown before hiding
$this.next('ul').find('ul').hide(); //Hide dropdown portion
$this.next('ul').css('width',selectWidth);
//on click, show dropdown
$this.next('ul').find('span').first().click(function(){
$this.next('ul').find('ul').toggle();
});
//on click, change top value, select hidden form, close dropdown
$this.next('ul').find('ul span').click(function(){
$(this).closest('ul').children().removeClass('selected');
$(this).parent().addClass("selected");
selection = $(this).parent().attr('rel');
selectedText = $(this).text();
$(this).closest('ul').prev().html(selectedText);
$this.val(selection); //This is what i can't get to work
$(this).closest('ul').hide();
});
});
//returns the jQuery object to allow for chainability.
return this;
}
this.val(x);
...?$this.val()
devrait fonctionner, peut-être le selection
valeur est défectueux, essayé d'alerte/de la console.enregistrement?hm.. ce qui s'est passé quand j'avais $.val(sélection) fini par changer tous les sélectionnez l'option valeur à 3 ou quelle que soit la sélection..
OriginalL'auteur eek meek | 2011-03-29
Vous devez vous connecter pour publier un commentaire.
** edit ** Craig me battre pour elle ** /edit **
** edit **
Juste un heads-up: .sélecteur() est obsolète en jQuery 1.7 et enlevé en jQuery 1.9: api.jquery.com/selector.
– Simon Steinberger
** /edit **
Utiliser le
.selector
propriété sur un jQuery collection.Dans votre plugin:
Cependant cette suite probablement de résoudre votre vraie question?
voir nouvel avenant 😉
merci pour la mise à jour, je pense que mon problème est que j'ai la fonction à l'intérieur d'un ce.each(function). Comment aurais-je cible-t-il?
Avant la
.each
de l'actuel jQuery exemple. Il n'y a pas besoin de le faire dans le chacun puisque tous les éléments trouvés sont venus de la même requête.Juste un heads-up: .sélecteur() est obsolète en jQuery 1.7 et enlevé en jQuery 1.9: api.jquery.com/selector
OriginalL'auteur BGerrissen
Cette page parle d'obtenir le sélecteur:
http://api.jquery.com/selector/
this.selector
.Merci, sauriez-vous une raison pour laquelle la valeur de sélecteur n'est pas défini pour moi?
Est-ce parce que vous avez utilisé
$.plugin
au lieu de$.fn.plugin
? Il est très facile d'erreur et puisthis
ne serait pas défini.Juste une remarque qu'il est obsolète. Je suis toujours à la recherche d'un bon remplacement. Cette fonction est proche, mais pas à 100%: stackoverflow.com/questions/2420970/...
OriginalL'auteur Craig
En raison de la dépréciation et de la suppression de jQuery
.selector
, j'ai expérimenté avec du javascriptDOM Nodes
et est venu avec un 2017 et au-delà de la solution jusqu'à ce qu'une meilleure façon vient...Alors maintenant, nous pouvons l'utiliser pour n'importe quel but. Vous pouvez l'utiliser comme un sélecteur jQuery... par exemple.
$($selector)
EDIT: Ma réponse originale à cette question ne vous l'attribut qui apparaît d'abord sur l'élément. Donc si l'on veut obtenir le id qui a été placé après la classe sur l'élément, ça ne marcherait pas.
Ma nouvelle solution utilise un objet pour stocker les informations d'attribut, par conséquent, nous pouvons vérifier si les deux ou juste un existe et régler le sélecteur en conséquence. Grâce à ManRo de la solution pour l'inspiration.
OriginalL'auteur Studocwho