|
1 | | -# Searching: getElement*, querySelector* |
| 1 | +# Recherches: getElement*, querySelector* |
2 | 2 |
|
3 | | -DOM navigation properties are great when elements are close to each other. What if they are not? How to get an arbitrary element of the page? |
| 3 | +Les outils de navigation du DOM sont très pratiques quand les éléments sont proches les uns des autres. Mais s'ils ne le sont pas ? Comment atteindre un élément arbitraire de la page ? |
4 | 4 |
|
5 | | -There are additional searching methods for that. |
| 5 | +Il existe d'autres méthodes de recherche pour cela. |
6 | 6 |
|
7 | | -## document.getElementById or just id |
| 7 | +## document.getElementById ou juste id |
8 | 8 |
|
9 | | -If an element has the `id` attribute, we can get the element using the method `document.getElementById(id)`, no matter where it is. |
| 9 | +Si un élément a l'attribut `id`, on peut atteindre cet élément en utilisant la méthode `document.getElementById(id)`, peu importe où elle se trouve. |
10 | 10 |
|
11 | | -For instance: |
| 11 | +Par exemple : |
12 | 12 |
|
13 | 13 | ```html run |
14 | 14 | <div id="elem"> |
15 | | - <div id="elem-content">Element</div> |
| 15 | + <div id="elem-content">Elément</div> |
16 | 16 | </div> |
17 | 17 |
|
18 | 18 | <script> |
19 | | - // get the element |
| 19 | + // récupération de l'élément : |
20 | 20 | *!* |
21 | 21 | let elem = document.getElementById('elem'); |
22 | 22 | */!* |
23 | 23 |
|
24 | | - // make its background red |
| 24 | + // on met son arrière-plan rouge : |
25 | 25 | elem.style.background = 'red'; |
26 | 26 | </script> |
27 | 27 | ``` |
28 | | - |
29 | | -Also, there's a global variable named by `id` that references the element: |
| 28 | +Il y a aussi une variable globale nommée selon l'`id` qui référence l'élément : |
30 | 29 |
|
31 | 30 | ```html run |
32 | 31 | <div id="*!*elem*/!*"> |
33 | | - <div id="*!*elem-content*/!*">Element</div> |
| 32 | + <div id="*!*elem-content*/!*">Elément</div> |
34 | 33 | </div> |
35 | 34 |
|
36 | 35 | <script> |
37 | | - // elem is a reference to DOM-element with id="elem" |
| 36 | + // elem est une référence à l'élément du DOM ayant l'id "elem" |
38 | 37 | elem.style.background = 'red'; |
39 | 38 |
|
40 | | - // id="elem-content" has a hyphen inside, so it can't be a variable name |
41 | | - // ...but we can access it using square brackets: window['elem-content'] |
| 39 | + // id="elem-content" contient un tiret, donc ça ne peut pas être un nom de variable |
| 40 | + // ...mais on peut y accéder en utilisant les crochets : window['elem-content'] |
42 | 41 | </script> |
43 | 42 | ``` |
44 | 43 |
|
45 | | -...That's unless we declare a JavaScript variable with the same name, then it takes precedence: |
| 44 | +...A moins qu'on déclare une variable Javascript avec le même nom, auquel cas celle-ci obtient la priorité : |
46 | 45 |
|
47 | 46 | ```html run untrusted height=0 |
48 | 47 | <div id="elem"></div> |
49 | 48 |
|
50 | 49 | <script> |
51 | | - let elem = 5; // now elem is 5, not a reference to <div id="elem"> |
| 50 | + let elem = 5; // maintenant elem vaut 5, ce n'est plus une référence à <div id="elem"> |
52 | 51 |
|
53 | 52 | alert(elem); // 5 |
54 | 53 | </script> |
55 | 54 | ``` |
56 | 55 |
|
57 | | -```warn header="Please don't use id-named global variables to access elements" |
58 | | -This behavior is described [in the specification](http://www.whatwg.org/specs/web-apps/current-work/#dom-window-nameditem), so it's kind of standard. But it is supported mainly for compatibility. |
| 56 | +```warn header="Ne pas utiliser les variables globales nommées selon l'id pour accéder aux éléments !" |
| 57 | +Ce comportement est décrit [dans la spécification](http://www.whatwg.org/specs/web-apps/current-work/#dom-window-nameditem), donc c'est standard. C'est principalement gardé pour des histoires de compatibilité. |
59 | 58 |
|
60 | | -The browser tries to help us by mixing namespaces of JS and DOM. That's fine for simple scripts, inlined into HTML, but generally isn't a good thing. There may be naming conflicts. Also, when one reads JS code and doesn't have HTML in view, it's not obvious where the variable comes from. |
| 59 | +Le navigateur essaie de nous aider en mélangeant les noms de JS et du DOM. C'est bien pour des scripts simples, intégré dans du HTML, mais en genéral ce n'est pas bon. Il peut y avoir des conflits de noms. Aussi, quand quelqu'un lira le code JS sans avoir le HTML à côté, ce ne sera pas évident pour lui d'où vient la variable. |
61 | 60 |
|
62 | | -Here in the tutorial we use `id` to directly reference an element for brevity, when it's obvious where the element comes from. |
| 61 | +Dans ce tutoriel, on utilise `id` pour directement référencer un élément rapidement, quand il sera évident d'où il vient. |
63 | 62 |
|
64 | | -In real life `document.getElementById` is the preferred method. |
| 63 | +Dans la vraie vie, `document.getElementById` est la méthode à avantager. |
65 | 64 | ``` |
66 | 65 |
|
67 | | -```smart header="The `id` must be unique" |
68 | | -The `id` must be unique. There can be only one element in the document with the given `id`. |
| 66 | +```smart header="L' `id` doit être unique" |
| 67 | +L'`id` doit être unique. Il ne peut y avoir qu'un élément dans le document avec un `id` donné. |
69 | 68 |
|
70 | | -If there are multiple elements with the same `id`, then the behavior of methods that use it is unpredictable, e.g. `document.getElementById` may return any of such elements at random. So please stick to the rule and keep `id` unique. |
| 69 | +S'il y a de multiples éléments avec le même `id`, alors le comportement de la méthode qui l'utilise est imprévisible, par exemple `document.getElementById` pourra renvoyer n'importe lequel de ces éléments aléatoirement. Donc suivez la règle et gardez l'`id` unique. |
71 | 70 | ``` |
72 | 71 |
|
73 | | -```warn header="Only `document.getElementById`, not `anyElem.getElementById`" |
74 | | -The method `getElementById` can be called only on `document` object. It looks for the given `id` in the whole document. |
| 72 | +```warn header="Seulement `document.getElementById`, pas `anyElem.getElementById`" |
| 73 | +La méthode `getElementById` ne peut être appelée que sur l'objet `document` . Elle va chercher l'`id` dans le document entier. |
75 | 74 | ``` |
76 | 75 |
|
77 | 76 | ## querySelectorAll [#querySelectorAll] |
78 | 77 |
|
79 | | -By far, the most versatile method, `elem.querySelectorAll(css)` returns all elements inside `elem` matching the given CSS selector. |
| 78 | +De loin, la méthode la plus polyvalente, `elem.querySelectorAll(css)` renvoie tous les éléments à l'intérieur de `elem` correspondant au sélecteur CSS donné en paramètre |
80 | 79 |
|
81 | | -Here we look for all `<li>` elements that are last children: |
| 80 | +Ici, on recherche tous les éléments `<li>` qui sont les derniers enfants : |
82 | 81 |
|
83 | 82 | ```html run |
84 | 83 | <ul> |
85 | | - <li>The</li> |
| 84 | + <li>Le</li> |
86 | 85 | <li>test</li> |
87 | 86 | </ul> |
88 | 87 | <ul> |
89 | | - <li>has</li> |
90 | | - <li>passed</li> |
| 88 | + <li>a</li> |
| 89 | + <li>réussi</li> |
91 | 90 | </ul> |
92 | 91 | <script> |
93 | 92 | *!* |
94 | 93 | let elements = document.querySelectorAll('ul > li:last-child'); |
95 | 94 | */!* |
96 | 95 |
|
97 | 96 | for (let elem of elements) { |
98 | | - alert(elem.innerHTML); // "test", "passed" |
| 97 | + alert(elem.innerHTML); // "test", "réussi" |
99 | 98 | } |
100 | 99 | </script> |
101 | 100 | ``` |
102 | 101 |
|
103 | | -This method is indeed powerful, because any CSS selector can be used. |
| 102 | +Cette méthode est très puissante, car tous les sélecteurs CSS peuvent être utilisés. |
104 | 103 |
|
105 | | -```smart header="Can use pseudo-classes as well" |
106 | | -Pseudo-classes in the CSS selector like `:hover` and `:active` are also supported. For instance, `document.querySelectorAll(':hover')` will return the collection with elements that the pointer is over now (in nesting order: from the outermost `<html>` to the most nested one). |
| 104 | +```smart header="On peut aussi utiliser des pseudo-classes" |
| 105 | +
|
| 106 | +Les pseudo-classes dans le sélecteur CSS comme `:hover` et `:active` sont aussi acceptés. Par exemple, `document.querySelectorAll(':hover')` renverra l'ensemble des éléments dont le curseur est au-dessus en ce moment (dans l'ordre d'imbrication : du plus extérieur `<html>` au plus imbriqué). |
107 | 107 | ``` |
108 | 108 |
|
109 | 109 | ## querySelector [#querySelector] |
110 | 110 |
|
111 | | -The call to `elem.querySelector(css)` returns the first element for the given CSS selector. |
| 111 | +Un appel à `elem.querySelector(css)` renverra le premier élément d'un sélecteur CSS donné. |
112 | 112 |
|
113 | | -In other words, the result is the same as `elem.querySelectorAll(css)[0]`, but the latter is looking for *all* elements and picking one, while `elem.querySelector` just looks for one. So it's faster and also shorter to write. |
| 113 | +En d'autres termes, le résultat sera le même que `elem.querySelectorAll(css)[0]`, mais celui-ci cherchera *tous* les éléments et en choisira un seul, alors que `elem.querySelector` n'en cherchera qu'un. C'est donc plus rapide, et plus court à écrire. |
114 | 114 |
|
115 | 115 | ## matches |
116 | 116 |
|
117 | | -Previous methods were searching the DOM. |
| 117 | +Les méthodes précédentes recherchaient dans le DOM. |
118 | 118 |
|
119 | | -The [elem.matches(css)](http://dom.spec.whatwg.org/#dom-element-matches) does not look for anything, it merely checks if `elem` matches the given CSS-selector. It returns `true` or `false`. |
| 119 | +La commande [elem.matches(css)](http://dom.spec.whatwg.org/#dom-element-matches) ne recherche rien, elle vérifie simplement que `elem` correspond au sélecteur CSS donné. Elle renvoie `true` ou `false`. |
120 | 120 |
|
121 | | -The method comes in handy when we are iterating over elements (like in an array or something) and trying to filter out those that interest us. |
| 121 | +Cette méthode devient utile quand on itère sur des éléments (comme dans un array par exemple) et qu'on veut filtrer ceux qui nous intéressent. |
122 | 122 |
|
123 | | -For instance: |
| 123 | +Par exemple : |
124 | 124 |
|
125 | 125 | ```html run |
126 | 126 | <a href="http://example.com/file.zip">...</a> |
127 | 127 | <a href="http://ya.ru">...</a> |
128 | 128 |
|
129 | 129 | <script> |
130 | | - // can be any collection instead of document.body.children |
| 130 | + // on peut mettre n'importe quel ensemble à la place de document.body.children |
131 | 131 | for (let elem of document.body.children) { |
132 | 132 | *!* |
133 | 133 | if (elem.matches('a[href$="zip"]')) { |
134 | 134 | */!* |
135 | | - alert("The archive reference: " + elem.href ); |
| 135 | + alert("le lien de l'archive : " + elem.href ); |
136 | 136 | } |
137 | 137 | } |
138 | 138 | </script> |
|
0 commit comments