Que renvoient les méthodes querySelectorAll et getElementsBy* ?
P粉060112396
2023-08-24 19:45:56
<p><code>getElementsByClassName</code> (et des fonctions similaires telles que <code>getElementsByTagName</code> et <code>querySelectorAll</code>) fonctionne avec <code>getElementById</code> c'est pareil ? Renvoyer un tableau d'éléments ? </p>
<p>La raison pour laquelle je demande est parce que j'essaie de changer le style de tous les éléments en utilisant <code>getElementsByClassName</code>. voir ci-dessous. </p>
<pre class="brush:php;toolbar:false;">//ne fonctionne pas
document.getElementsByClassName('myElement').style.size = '100px';
//travaux
document.getElementById('myIdElement').style.size = '100px';</pre></p>
Vous utilisez des tableaux comme objets,
getElementbyId
etgetElementsByClassName
est :getElementbyId
renverra un objet Element ou null si aucun élément avec cet ID n'est trouvégetElementsByClassName
renverra une live HTMLCollection, qui peut être de longueur 0getElementsByClassName
https://www.w3.org/ TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname
Obtenir ElementById
https://developer.mozilla.org/en- US/docs/Web/API/Document/getElementById
Incluez les lignes suivantes dans votre code :
ne fonctionnera pas comme prévu car
getElementByClassName
renverra un tableau, et ce tableau n'a pasgetElementByClassName
将返回一个数组,并且该数组不具有样式 属性,您可以通过迭代来访问每个
.元素
d'attributstyle
auquel vous pouvez accéder en itérant dans chaque ÉlémentC'est l'attribut de la fonction
getElementById
为您工作的原因,该函数将返回直接对象。因此,您将能够访问style
.Votre
getElementById
代码之所以有效,是因为 ID 必须是唯一的,因此该函数始终只返回一个元素(如果没有找到,则返回null
).Cependant, ces méthodes
getElementsByClassName
,getElementsByName
,getItemByTagName
, etgetElementsByTagNameNS
Renvoie une collection itérable d’éléments.Les noms de méthodes fournissent des indices :
getElement
暗示单数,而getElements
implique pluriel .Methods
querySelector
a> renvoient également un seul élément etquerySelectorAll code>
renvoie une collection itérable.La collection itérable peut être
HTMLCollectionNodeList
或HTMLCollection
NodeList一个> ouun>.
getElementsByName
和querySelectorAll
均指定返回节点列表
;其他getElementsBy*
方法 指定返回 HTMLCollection
spécifient tous deux de renvoyer la 🎜liste de nœuds code> ;Autre 🎜getElementsBy* méthode🎜 spécifie de renvoyer HTMLCollection code>, veuillez toutefois noter que certaines versions de navigateur implémentent cela différemment. 🎜 🎜Ces deux types de collections ne fournissent pas les mêmes propriétés que les éléments, nœuds ou types similaires ; c'est pourquoi lire 🎜style…🎜(…🎜) / code> Raison de l’échec. En d'autres termes : 🎜NodeList ou 🎜HTMLCollection n'a pas de 🎜style ; seul 🎜Element a 🎜style ; 🎜document.getElements
…(
…)
读取style
etNodeList
或HTMLCollection
没有style
;只有Element
具有style
querySelectorAllCes collections « de type tableau » sont des listes de zéro ou plusieurs éléments sur lesquels vous devez parcourir pour y accéder. Bien que vous puissiez les parcourir comme des tableaux, veuillez noter qu'ils ne sont pas les mêmes que noreferrer">s.
Dans les navigateurs modernes, vous pouvez utiliser数组
Array.from
; vous pouvez ensuite utiliser
forEach
et d'autres méthodes array comme les méthodes d'itérationArray.from
;那么您可以使用forEach
: Dans les anciens navigateurs qui ne prennent pas en charge Array.from ou les méthodes d'itération, vous pouvez toujours utiliser. Ensuite, vous pouvez le parcourir comme un vrai tableau :
lui-même, mais notez que dans la plupart des cas, ces collections sontArray.prototype.slice.call
Vous pouvez également itérerlive
:NodeList
或HTMLCollection
(documentation MDN, spécification DOM), c'est-à-dire qu'elles se mettent à jour à mesure que le DOM change. Donc, si vous insérez ou supprimez des éléments pendant une boucle, assurez-vous de ne pas accidentellement sauter certains éléments ou créer une boucle infinie. La documentation MDN doit toujours indiquer si une méthode renvoie une collection live ou une collection statique. Par exemple,NodeList
提供了一些迭代方法,例如现代浏览器中的forEach
Vous pouvez également utiliser une simple boucle :for
Narration :.childNodes
génère unelive
liveNodeList
et.children
.childNodes
产生一个 liveNodeList
和.children
生成一个 liveHTMLCollection
génère unHTMLCollection
, donc ces deux getters doivent également être gérés avec se soucier.Il existe des bibliothèques comme
jQuery🎜 qui raccourcissent les requêtes DOM et créent une couche d'abstraction sur "un élément" et une "collection d'éléments": 🎜