Module Selector
Ce module est dédié à la sélection d'élément du DOM (Document Object Model).
Il peut être utilisé indépendamment de Dynamique.
Contrairement aux régles de sélections CSS 3, les régles proposées par ce module permettent une sélection plus efficace des éléments.
Dans le cas où une sélection exploitant uniquement les régles de bases CSS 3 est suffisante, il est préférable d'utiliser le
module SelectorQuery à la place, dans un objectif d'optimisation des performances.
Celui-ci repose sur la méthode document.querySelectorAll et l'adapte à Dynamique.
Le choix du sélecteur à utiliser avec Dynamique doit être fait en fonction des nécessités réelles et concrètes du projet réalisé.
Dans le cas où une sélection d'éléments DOM se ferait uniquement par l'attribut id,
l'adaptation de la méthode document.getElementById semble encore plus appropriée que les deux précédentes solutions énoncées.
La documentation de ce module décris les opérateurs et les régles de sélections supportées.
Accessibilité
Lorsque Selector est utilisé sans Dynamique, il s'initialise directement sur l'objet window.
Il est alors accessible tel que:
Selector(...);
// ===
window.Selector(...);
Lorsque Selector est utilisé avec Dynamique, il s'initialise en tant que module
de Dynamique ainsi que comme sélecteur par défaut d'éléments DOM.
Dynamique("body"); // Selector est appelé en interne par Dynamique
Sélecteurs et filtres
Ce module à pour but de sélectionner un ensemble d'éléments DOM correspondant
à un ensemble de régles de recherches donné, dans un contexte et un document donné.
Ces régles de recherches sont décrites sous forme de chaine de caractère où certains caractères seront associés à des régles de recherches
alors que d'autres à des paramètres à utiliser avec ces régles.
Par exemple, la chaine #monId représente une recherche devant retournée l'ensemble des éléments
ayant pour id la valeur monId.
Le symbole # demande le filtrage d'éléments par leur attribut id et
la chaine monId indique la valeur que doivent avoir les éléments pour être sélectionné.
La sélection des éléments se fait en exploitant deux types de régle: les régles de sélection, qui permettent de sélectionner des éléments, et les régles de filtrage, qui permettent de filtrer des éléments sélectionnés par les régles de sélection.
Régles de sélection
Les régles de sélection permettent de sélectionner un ensemble d'éléments répondant à des critères se sélection. Le module supporte l'ensemble des régles de sélection suivantes:
-
Sélecteur d'éléments descendants
ou" "(espace): permet la sélection de noeuds descendants, mais pas nécessairement fils direct, d'un élément donné.-
Synthaxe:
A B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"body span"sélectionnera tous les élémentsspanétant enfant de body."body span|p"sélectionnera tout les élémentsspanoupdescendants debody.
-
-
Sélecteur d'éléments fils
>: permet la sélection de noeuds fils descendants direct d'un élément donné.-
Synthaxe:
A > BA>B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"body > span"sélectionnera tous les fils descendants directspandebody."body > span|p"sélectionnera tout les fils descendants directspanoupdescendants debody.
-
-
Sélecteur de voisin direct
+: permet la sélection de noeuds qui suivent immédiatement un élément donné.-
Synthaxe:
A + BA+B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"head + body"sélectionnera tous les élémentsbodysuivant immédiatement l'élémentbody."h1 + p|h2"sélectionnera tous les élémentspouh2suivant immédiatement l'élémenth1.
-
-
Sélecteur de voisins
~: permet la sélection de noeuds qui suivent un élément donné et qui ont le même parent.-
Synthaxe:
A ~ BA~B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"head ~ body"sélectionnera tous les élémentsbodysuivant l'élémentbody."h1 ~ p|h2"sélectionnera tous les élémentspouh2suivant l'élémenth1.
-
-
Sélecteur de parent
-: permet la sélection des parents des éléments donnés.-
Synthaxe:
A - BA-B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"body - html"sélectionnera les parents debodyayant comme parenthtml."span - h1|h2"sélectionnera les parents desspanayant comme parenth1ouh2.
-
-
Sélecteur d'enfants direct par numéro de noeuds
/: permet la d'enfants direct puis d'immédiatement les filtrer par leur numéro de noeuds.-
Synthaxe:
A / BA/B. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"p / 1"sélectionnera les enfants directs depayant commenodeType1."p / 1|2"sélectionnera les enfants directs despayant commenodeType1ou2.
-
Régles de filtrage
Les régles de filtrage permettent de filtrer un ensemble d'éléments. Le module supporte l'ensemble des filtres de sélection suivants:
-
Filtre de classe
.: permet de filtrer les éléments par rapport à leur attributclass. Un élément sera retenu si il possède au moins la ou les classes indiquées.-
Synthaxe:
.class. -
Support: Ce sélecteur supporte l'opérateur
OU(|), l'opérateurET(&) et le mot clef*. -
Exemple:
".title"ne retiendra que les éléments ayant au moins la classetitle.".title|title1&title2"sélectionnera les éléments ayant au moins les classestitleou au moins les classestitle1ettitle2.
-
-
Filtre d'identifiant
#: permet de filtrer les éléments par rapport à leur attributid.-
Synthaxe:
#id. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"#title"ne retiendra que les éléments ayant un identifiant valanttitle."#title1|title2"sélectionnera les éléments ayant un identifiant valanttitle1outitle2.
-
-
Filtre de nom
@: permet de filtrer les éléments par rapport à leur attributname.-
Synthaxe:
@name. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"@firstname"ne retiendra que les éléments ayant un nom valantfirstname."@mail|phone"sélectionnera les éléments ayant un nom valantmailouphone.
-
-
Filtre de numéro de noeud
//: permet de filtrer les éléments par rapport à leur numéro de noeudnodeType.-
Synthaxe:
//nodeType. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"//1"ne retiendra que les éléments ayant comme numéro de noeud1."//1|2"sélectionnera les éléments ayant comme numéro de noeud1ou2.
-
-
Filtre de nom de noeud
%: permet de filtrer les éléments par rapport à leur attributnodeName.-
Synthaxe:
%nodeName. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et le mot clef*. -
Exemple:
"%DIV"ne retiendra que les éléments ayant comme nom de noeudDIV."%'#text'|DIV"sélectionnera les éléments ayant comme nom de noeud#textouDIV.
-
-
Filtre pseudo-classes
:: permet de filtrer les éléments par rapport à une information d'état qui n'est pas stocké dans l'arbre du document.-
Synthaxe:
:pseudo-classe. -
Support: Ce sélecteur supporte l'opérateur
OU(|) et l'opérateurET(&). -
Exemple:
":root"ne retiendra que l'élément étant la racine du document. -
Pseudo-classes supportées:
-
root: cible la racine de l'arbre représentant le document; -
nth-child(an+b): cible un élément qui possèdean+b-1éléments voisins (au même niveau) avant lui dans l'arbre du document pour des valeurs entièresnincrémenté à partir de 0 et qui possède un élément parent. Le mot clefoddpeut être utilisé pour représenter les éléments impaires et le mot clefeventpour représenter les éléments paires. -
nth-int-child(a1,b1[,...aN,bN]): cible un élément dont la position est dans un des intervals donnés. Le mot clef+ou-peuvent être utilisés pour représenter respectivement+Infinityet-Infinity. -
nth-last-child(an+b): cible un élément qui possèdean+b-1éléments frères qui le suivent au même niveau dans l'arbre du document pour des valeurs entièresnincrémenté à partir de 0 et qui possède un élément parent. Le mot clefoddpeut être utilisé pour représenter les éléments impaires et le mot clefeventpour représenter les éléments paires. -
nth-of-type(x): cible des éléments d'un type donné, en fonction de leur position au sein d'un groupe de frères et soeurs. Le mot clefoddpeut être utilisé pour représenter les éléments impaires et le mot clefeventpour représenter les éléments paires. -
nth-int-type(a1,b1[,...aN,bN]): cible des éléments d'un type donné dont de leur position au sein d'un groupe de frères et soeurs est comprise dans un des intervals donnés. Le mot clef+ou-peuvent être utilisés pour représenter respectivement+Infinityet-Infinity. -
nth-last-of-type(an+b): cible les éléments qui possèdean+b-1noeuds frères étant les mêmes éléments et qui le suivent dans l'arbre du document pour des valeurs entières denincrémenté à partir de 0 et qui possède le même élément parent. Le mot clefoddpeut être utilisé pour représenter les éléments impaires et le mot clefeventpour représenter les éléments paires. -
first-child: cible les éléments qui sont les premiers éléments fils par rapport à leur élément parent, en tenant compte les noeuds non-éléments. -
last-child: cible les éléments qui sont les derniers éléments fils par rapport à leur élément parent, en tenant compte les noeuds non-éléments. -
first-element: cible les éléments qui sont les premiers éléments fils par rapport à leur élément parent, en ne tenant pas compte des noeuds non-éléments. -
last-element: cible les éléments qui sont les derniers éléments fils par rapport à leur élément parent, en ne tenant pas compte des noeuds non-éléments. -
first-of-type: cible les éléments qui sont les premiers éléments fils par rapport à leur élément parent, en ne tenant pas compte des noeuds non-éléments, parmis les éléments ayant le mêmenodeName. -
last-of-type: cible les éléments qui sont les derniers éléments fils par rapport à leur élément parent, en ne tenant pas compte des noeuds non-éléments, parmis les éléments ayant le mêmenodeName. -
only-of-type: cible les éléments qui sont les seuls fils de leur élément parent, en ne tenant pas compte des noeuds non-éléments, à avoir cenodeName. -
only-child: cible les éléments qui sont les seuls fils de leur élément parent, en ne tenant pas compte des noeuds non-éléments. -
only-node: cible les éléments qui sont les seuls fils de leur élément parent, en tenant compte des noeuds non-éléments. -
empty: cible les éléments qui n'ont pas d'éléments fils. -
empty-node: cible les éléments qui n'ont pas de noeuds fils. -
target: cible l'unique élément (s'il existe) dont l'attributidcorrespond au fragment d'identifiant de l'URI du document. -
lang(x): cible les éléments visible, dont l'attributlangest égal àx. -
hidden: cible les éléments cachés, dont l'attributhiddenvauttrue. -
enabled: cible les éléments activés, dont l'attributenabledvauttrue. -
disabled: cible les éléments désactivés, dont l'attributenabledvautfalse. -
checked: cible les éléments cochés, dont l'attributcheckedvauttrue. -
unchecked: cible les éléments non-cochés, dont l'attributcheckedvautfalse. -
indeterminate: cible les éléments qui sont dans un état indéterminé (ni-coché, ni non-coché), dont l'attributindeterminatevauttrue. -
valid: cible les éléments valides, dont l'attributvalidity.validvauttrue. -
contains(x): cible les éléments dont le contenu contientx, en étant insenssible à la casse. -
contains-exactly(x): cible les éléments dont le contenu contientx, en étant senssible à la casse. -
focus: cible les éléments qui ont l'attention de l'utilisateur (focus). -
hover: cible les éléments qui sont survolés (hover). -
load: cible les éléments dont leur ressource à finie de charger (load).
-
-
-
Filtre par attributs et propriétés
[: permet de filtrer les éléments par rapport à la valeur de leurs attributs ou propriétés.-
Synthaxe:
[attr operator value]. -
Caractère fermant:
]. -
Support: Ce sélecteur supporte l'opérateur
OU(|),ET(|),OU(||),ET(&&) et le mot clef*. Il tient également compte des guillemets simple et double' ". -
Exemple:
"[id = monId]"ne retiendra que les éléments ayant comme propriétésidla valeurmonId."[a.b|a = h.g|t && f = g || y = o]". -
Opérateurs supportés:
-
ou""(aucun opérateur): vérifie si la propriété vauttrueou si elle vautfalseou équivalent ("",0,undefinedetc...). -
#=: vérifie si le type de la propriété est égale à la valeur donné. -
/=: vérifie si la valeur de la propriété correspondant à l'expresson régulière donnée. -
=: vérifie si la valeur de la propriété est égale à la valeur donnée. -
!=: vérifie si la valeur de la propriété n'est pas égale à la valeur donnée. -
>: vérifie si la valeur de la propriété est supérieur à la valeur donnée. -
: vérifie si la valeur de la propriété est inférieur à la valeur donnée. -
>=: vérifie si la valeur de la propriété est supérieur ou égale à la valeur donnée. -
: vérifie si la valeur de la propriété est inférieur ou égale à la valeur donnée. -
a,b: vérifie si la valeur de la propriété est dans l'intervala,bdonné. -
~=: vérifie si, dans la valeur de la propriété, la valeur donnée entourée par des espaces est présente. -
^=: vérifie si la valeur de la propriété commence par la valeur donnée. -
$=: vérifie si la valeur de la propriété termine par la valeur donnée. -
*=: vérifie si la valeur de la propriété contient au moins une fois la valeur donnée (senssible à la casse). -
%=: vérifie si la valeur de la propriété contient au moins une fois la valeur donnée (insenssible à la casse). -
|=: vérifie si la valeur de la propriété contient exactement la valeur donnée ou dont si la valeur de la propriété commence par la valeur donnée suivi d'un tiret-.
-
-
Autres régles annexes
Les régles annexes sont des régles qui ne peuvent être considéré ni comme des régles de sélections, ni comme des régles de filtrage. Les régles annexes sont les suivantes:
-
Nouvelle recherche
,: permet d'effectuer plusieurs recherches dans une seule chaine de recherche. Les éléments trouvés seront ajoutés aux éléments précédemment trouvés.-
Synthaxe:
rule, rule. -
Exemple:
"body > div, a"sélectionnera les élémentsdivétant enfants directs debodyet l'ensemble des élémentsadu document.
-
-
Nouvelle recherche à partir des résultats précédents
;: permet d'effectuer une nouvelle recherche à partir des éléments précédemment sélectionnés. Les éléments trouvés seront ajoutés aux éléments précédemment trouvés.-
Synthaxe:
rule; rule. -
Exemple:
"body > div; a"sélectionnera les élémentsdivétant enfants directs debodyet l'ensemble des élémentsaétant dans les élémentsdivprécédemment trouvés.
-
-
Bulle de recherche
: permet d'effectuer une nouvelle recherche. Les éléments trouvés seront ajoutés aux éléments précédemment trouvés puis la recherche pourra continuer sur l'ensemble des ces éléments.-
Synthaxe:
rule. -
Caractère fermant:
>. -
Opérateur supporté: L'opérateur
$$est supporté. Si$$est utilisé, la recherche commencera à partir des éléments précédemment trouvés. -
Exemple:
"body > div span"sélectionnera les élémentsdivétant enfants directs debody, l'ensemble des élémentsh1puis l'ensemble des élémentsspanétant dans tout les éléments trouvés précédemment.
-
Compatibilité
Le module Selector est réalisé sous le standard EcmaScript 6.
Dépendances
Le module Selector n'a aucune dépendance.