Recherche sur le blog

lundi 27 février 2017

[JS] JQuery - Mémo #1 - Sélecteurs

Coché et sélectionné

On utilisera le sélecteur ":checked".
Exemple :
if($('#monChampId').is(':checked'))
{
  ...
}
A noter qu'on pourra utiliser ":selected" pour des listes déroulantes, dans la méthode find par exemple, ou directement comme sélecteur.
$("#maComboId option:selected").text();
Récupération du parent (méthode)
$('#formTest').parent()
Récupère le parent du niveau direct inférieur. On peut aussi spécifier un filtre en tant que paramètre de la fonction, pour s'assurer de la nature du parent choisi.

Sélection par classe
var champ = $('.classe1');
Sélection par ID
var champ = $('#idChamp');
Sélection de champs sur l'attribut "name"
$('element[name="VALUE"]')
On peut notamment utiliser :
  • ^= : commence par.
  • $= : termine par.
  • *= : contient.
La recherche peut être effectuée sur d'autres attributs (ex : id, type).

Traitement appliqué à plusieurs éléments

Utiliser la fonction find sur le parent (par exemple, un formulaire).
$('#formTest').find('input[type=text].classe1, 
   select.classe2').each(function()
{ 
 // Traitement des champs 
 // (utiliser $(this) pour le champ parcouru).
});
On peut envisager d'utiliser des sélecteurs qui contrôlent l'état.
$('#formTest').find('select.classe2:visible:disabled, 
   input[type=radio]:not(:disabled)').each(function()
{ 
 ...
});
Ou même recherche sur un enfant...
$('#formTest').find('div.classe1 > input[type=text]')
  .each(function()
{ 
 ...
});

Plus

Les sélecteurs

[Java] Appel de méthode avec l'API Reflection

Vous avez par exemple deux classes qui possèdent la même méthode (même nom, même signature) mais au moment de l'exécution, vous souhaitez choisir dynamiquement laquelle appeler à l'exécution. L'API Reflection permet d'effectuer cela de manière plutôt simple.

Supposons la classe suivante, "MaClasse1" dans laquelle on a écrit une fonction "getHello", qui prend en paramètres une chaine de caractère, et un nombre quelconque dans un objet de type Long. La fonction retournera C1= suivi du contenu de la chaine. Dans l'exemple nous n'afficherons pas le nombre passé en second paramètre.
public class MaClasse1 
{
  public String getHello(String text, Long nbTest)
  {
    return "C1=" + text;
  }
}
Nous créerons deux classes supplémentaires, appelées "MaClasse2" et "MaClasse3", qui implémenteront la même fonction en retournant cette fois C2 ou C3, tous deux suivis du contenu du paramètre.
Class myClass = ...;
Object instClasse = myClass.newInstance();
Class paramTypes[] = new Class[2];
paramTypes[0] = String.class;
paramTypes[1] = Long.class;
Method laMethode = myClass.getMethod("getListeDestinataire",
  lo_parameterType);
Object paramVal[] = new Object[2];
paramVal[0] = ...;
paramVal[1] = 2L;
System.out.println(laMethode.invoke(instClasse, paramVal));
Ce qu'on a fait :
  • Instancier un objet de classe en spécifiant (par exemple, dans une fonction), la classe (ex : MaClasse1.class) ou avec Class.forName("Class FQN").
  • Créer un tableau contenant les types de paramètres. Ce sera un tableau de classes. Dans notre cas, ce sont des objets classiques, mais on peut aussi utiliser Class.forName().
  • On crée un objet de type Method, en utilisant getMethod() de l'objet Class (pas l'instance). On passe en paramètres le nom de la fonction, et le tableau de types.
  • Créer un tableau, cette fois qui contiendra des éléments Object. 
  • Spécifier les valeurs des paramètres.
  • Appeler la méthode invoke() de l'objet Method, avec en paramètres l'instance de la classe et les valeurs des différents paramètres. 
Ainsi, si on écrit :
 Class myClass = MaClasse2.class;
 ...
 paramVal[0] = "test";
Lors de l'affichage, on obtiendra "C2=test".

Dans ce petit bout de code on a donné les valeurs aux différents objets en "dur"... Il ne vous reste plus qu'à adapter tout ça ;-) Bon amusement !