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
" "
(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émentsspan
oup
descendants debody
.
-
-
Sélecteur d'éléments fils
>
: permet la sélection de noeuds fils descendants direct d'un élément donné.-
Synthaxe:
A > B
A>B
. -
Support: Ce sélecteur supporte l'opérateur
OU
(|
) et le mot clef*
. -
Exemple:
"body > span"
sélectionnera tous les fils descendants directspan
debody
."body > span|p"
sélectionnera tout les fils descendants directspan
oup
descendants debody
.
-
-
Sélecteur de voisin direct
+
: permet la sélection de noeuds qui suivent immédiatement un élément donné.-
Synthaxe:
A + B
A+B
. -
Support: Ce sélecteur supporte l'opérateur
OU
(|
) et le mot clef*
. -
Exemple:
"head + body"
sélectionnera tous les élémentsbody
suivant immédiatement l'élémentbody
."h1 + p|h2"
sélectionnera tous les élémentsp
ouh2
suivant 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 ~ B
A~B
. -
Support: Ce sélecteur supporte l'opérateur
OU
(|
) et le mot clef*
. -
Exemple:
"head ~ body"
sélectionnera tous les élémentsbody
suivant l'élémentbody
."h1 ~ p|h2"
sélectionnera tous les élémentsp
ouh2
suivant l'élémenth1
.
-
-
Sélecteur de parent
-
: permet la sélection des parents des éléments donnés.-
Synthaxe:
A - B
A-B
. -
Support: Ce sélecteur supporte l'opérateur
OU
(|
) et le mot clef*
. -
Exemple:
"body - html"
sélectionnera les parents debody
ayant comme parenthtml
."span - h1|h2"
sélectionnera les parents desspan
ayant comme parenth1
ouh2
.
-
-
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 / B
A/B
. -
Support: Ce sélecteur supporte l'opérateur
OU
(|
) et le mot clef*
. -
Exemple:
"p / 1"
sélectionnera les enfants directs dep
ayant commenodeType
1
."p / 1|2"
sélectionnera les enfants directs desp
ayant commenodeType
1
ou2
.
-
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 classestitle
ou au moins les classestitle1
ettitle2
.
-
-
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 valanttitle1
outitle2
.
-
-
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 valantmail
ouphone
.
-
-
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 noeud1
ou2
.
-
-
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#text
ouDIV
.
-
-
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èresn
incrémenté à partir de 0 et qui possède un élément parent. Le mot clefodd
peut être utilisé pour représenter les éléments impaires et le mot clefevent
pour 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+Infinity
et-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èresn
incrémenté à partir de 0 et qui possède un élément parent. Le mot clefodd
peut être utilisé pour représenter les éléments impaires et le mot clefevent
pour 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 clefodd
peut être utilisé pour représenter les éléments impaires et le mot clefevent
pour 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+Infinity
et-Infinity
. -
nth-last-of-type(an+b)
: cible les éléments qui possèdean+b-1
noeuds frères étant les mêmes éléments et qui le suivent dans l'arbre du document pour des valeurs entières den
incrémenté à partir de 0 et qui possède le même élément parent. Le mot clefodd
peut être utilisé pour représenter les éléments impaires et le mot clefevent
pour 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'attributid
correspond au fragment d'identifiant de l'URI du document. -
lang(x)
: cible les éléments visible, dont l'attributlang
est égal àx
. -
hidden
: cible les éléments cachés, dont l'attributhidden
vauttrue
. -
enabled
: cible les éléments activés, dont l'attributenabled
vauttrue
. -
disabled
: cible les éléments désactivés, dont l'attributenabled
vautfalse
. -
checked
: cible les éléments cochés, dont l'attributchecked
vauttrue
. -
unchecked
: cible les éléments non-cochés, dont l'attributchecked
vautfalse
. -
indeterminate
: cible les éléments qui sont dans un état indéterminé (ni-coché, ni non-coché), dont l'attributindeterminate
vauttrue
. -
valid
: cible les éléments valides, dont l'attributvalidity.valid
vauttrue
. -
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ésid
la valeurmonId
."[a.b|a = h.g|t && f = g || y = o]"
. -
Opérateurs supportés:
-
""
(aucun opérateur): vérifie si la propriété vauttrue
ou si elle vautfalse
ou équivalent (""
,0
,undefined
etc...). -
#=
: 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,b
donné. -
~=
: 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 debody
et l'ensemble des élémentsa
du 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 debody
et l'ensemble des élémentsa
étant dans les élémentsdiv
pré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émentsh1
puis 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.