Faire getElementsByClassName
(et des fonctions similaires comme getElementsByTagName
et querySelectorAll
) fonctionnent de la même manière getElementById
ou renvoient-elles un tableau d'éléments?
La raison pour laquelle je demande est que j'essaie de changer le style de tous les éléments en utilisant getElementsByClassName
. Voir ci-dessous.
//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';
//works
document.getElementById('myIdElement').style.size = '100px';
getElementsByClassName()
implique un pluriel, alors qu'ilgetElementById()
implique un élément élément singulier.Réponses:
Votre
getElementById()
code fonctionne car les identifiants doivent être uniques et donc la fonction renvoie toujours exactement un élément (ounull
si aucun n'a été trouvé).Cependant,
getElementsByClassName()
,querySelectorAll()
et d' autresgetElementsBy*
méthodes renvoient une collection semblable à un tableau d'éléments. Répétez dessus comme vous le feriez avec un vrai tableau:Si vous préférez quelque chose de plus court, envisagez d'utiliser jQuery :
la source
<iframe>
qui fait également partie de votre domainequerySelectorAll()
et vous pouvez avoir un joli code court sans une grande dépendance à l'ancienne.qSA(".myElement").forEach(el => el.style.size = "100px")
Peut-être que le wrapper recevra un rappel.qSA(".myElement", el => el.style.size = "100px")
Vous utilisez un tableau comme objet, la différence entre
getElementbyId
etgetElementsByClassName
est la suivante:getElementbyId
retournera un objet Element ou nul si aucun élément avec l'ID n'est trouvégetElementsByClassName
retournera une HTMLCollection en direct , éventuellement de longueur 0 si aucun élément correspondant n'est trouvégetElementsByClassName
https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname
getElementById
https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById
dans votre code les lignes:
ne pas fonctionner comme prévu, parce que la
getElementByClassName
retourne un tableau, et le tableau sera pas avoir lastyle
propriété, vous pouvez accéder à chaqueelement
par itérer à travers eux.C'est pourquoi la fonction
getElementById
a fonctionné pour vous, cette fonction retournera l'objet direct. Par conséquent, vous pourrez accéder à lastyle
propriété.la source
La description suivante est tirée de cette page :
Donc, en tant que paramètre
getElementsByClassName
accepterait un nom de classe.S'il s'agit de votre corps HTML:
puis
var menuItems = document.getElementsByClassName('menuItem')
retournerait une collection (pas un tableau) des 3 supérieurs<div>
s , car ils correspondent au nom de classe donné.Vous pouvez ensuite parcourir cette collection de nœuds (
<div>
dans ce cas) avec:Veuillez consulter cet article pour en savoir plus sur les différences entre les éléments et les nœuds.
la source
for (var menuItemIndex = 0 ; menuItemIndex < menuItems.length ; menuItemIndex ++) {
à mon avis.ES6 fournit une
Array.from()
méthode qui crée une nouvelle instance Array à partir d'un objet de type tableau ou itérable.Comme vous pouvez le voir dans l'extrait de code, après avoir utilisé la
Array.from()
fonction, vous pouvez alors manipuler chaque élément.La même solution en utilisant
jQuery
.la source
En d'autres termes
document.querySelector()
sélectionne uniquement la première un élément du sélecteur spécifié. Donc, il ne crache pas un tableau, c'est une valeur unique. Semblable à cedocument.getElementById()
qui va chercher ID-éléments seulement, étant donné que les ID doivent être uniques.document.querySelectorAll()
sélectionne tous les éléments avec le sélecteur spécifié et les renvoie dans un tableau. Similaire àdocument.getElementsByClassName()
pour les classes et lesdocument.getElementsByTagName()
balises uniquement.Pourquoi utiliser querySelector?
Il est utilisé uniquement dans le seul but de facilité et de brièveté.
Pourquoi utiliser getElement / sBy? *
Des performances plus rapides.
Pourquoi cette différence de performance?
Les deux méthodes de sélection ont pour but de créer une liste de nœuds pour une utilisation ultérieure. querySelectors génère une liste de nœuds statique avec les sélecteurs, elle doit donc d'abord être créée à partir de zéro.
getElement / sBy * adapte immédiatement la liste de nœuds en direct existante du DOM actuel.
Alors, quand utiliser quelle méthode c'est à vous / votre projet / votre appareil.
Infos
Démo de toutes les méthodes Test de performance de la
documentation NodeList
la source
Il renvoie une liste de type Array.
Vous en faites un tableau comme exemple
la source
Vous pouvez obtenir un seul élément en exécutant
mais cela fonctionnera pour le premier élément avec la classe .myElement.
Si vous souhaitez appliquer ceci pour tous les éléments avec la classe, je vous suggère d'utiliser
la source
la source
Avec ES5 + (tout parcouru de nos jours - 2017), vous devriez pouvoir faire
la source
Une réponse au cas spécifique de Drenzii ...
Vous pouvez créer une fonction qui fonctionnera pour n'importe lequel des
word
éléments et passer le numéro de celui que vous souhaitez transformer, comme:la source