¿ getElementsByClassName
Funcionan (y funciones similares como getElementsByTagName
y querySelectorAll
) lo mismo getElementById
o devuelven una matriz de elementos?
La razón por la que pregunto es porque estoy tratando de cambiar el estilo de todos los elementos usando getElementsByClassName
. Vea abajo.
//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';
//works
document.getElementById('myIdElement').style.size = '100px';
getElementsByClassName()
implica un plural, mientras quegetElementById()
implica un elemento de elemento singular.Respuestas:
Su
getElementById()
código funciona ya que los ID deben ser únicos y, por lo tanto, la función siempre devuelve exactamente un elemento (onull
si no se encontró ninguno).Sin embargo,
getElementsByClassName()
,querySelectorAll()
, y otrosgetElementsBy*
métodos devuelven una colección array-como de elementos. Iterar sobre él como lo haría con una matriz real:Si prefiere algo más corto, considere usar jQuery :
fuente
<iframe>
querySelectorAll()
y puede tener un código corto agradable sin una gran dependencia de la vieja escuela.qSA(".myElement").forEach(el => el.style.size = "100px")
Tal vez haga que el contenedor reciba una devolución de llamada.qSA(".myElement", el => el.style.size = "100px")
Está utilizando una matriz como objeto, la diferencia entre
getElementbyId
ygetElementsByClassName
es que:getElementbyId
devolverá un objeto Element o nulo si no se encuentra ningún elemento con la IDgetElementsByClassName
devolverá una colección HTMLC en vivo , posiblemente de longitud 0 si no se encuentran elementos coincidentesgetElementsByClassName
https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname
getElementById
https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById
en su código las líneas:
será NO funcionan como se esperaba, debido a que la
getElementByClassName
devolverá una matriz y la matriz será NO tener lastyle
propiedad, se puede acceder a cadaelement
iterando a través de ellos.Es por eso que la función
getElementById
funcionó para usted, esta función devolverá el objeto directo. Por lo tanto, podrá acceder a lastyle
propiedad.fuente
La siguiente descripción se toma de esta página :
Entonces, como parámetro
getElementsByClassName
aceptaría un nombre de clase.Si este es tu cuerpo HTML:
luego
var menuItems = document.getElementsByClassName('menuItem')
devolvería una colección (no una matriz) de los 3<div>
s superiores , ya que coinciden con el nombre de clase dado.Luego puede iterar sobre esta
<div>
colección de nodos ( s en este caso) con:Consulte esta publicación para obtener más información sobre las diferencias entre elementos y nodos.
fuente
for (var menuItemIndex = 0 ; menuItemIndex < menuItems.length ; menuItemIndex ++) {
en mi opinión.ES6 proporciona un
Array.from()
método que crea una nueva instancia de matriz a partir de un objeto iterativo o similar a una matriz.Como puede ver dentro del fragmento de código, después de usar la
Array.from()
función, puede manipular cada elemento.La misma solución usando
jQuery
.fuente
En otras palabras
document.querySelector()
Buscamos solamente el primero uno de los elementos del selector especificado. Por lo tanto, no escupe una matriz, es un valor único. Similar a lodocument.getElementById()
que obtiene solo elementos de ID, ya que los ID deben ser únicos.document.querySelectorAll()
selecciona todos los elementos con el selector especificado y los devuelve en una matriz. Similar a solodocument.getElementsByClassName()
para clases ydocument.getElementsByTagName()
etiquetas.¿Por qué usar querySelector?
Se usa simplemente con el único propósito de facilidad y brevedad.
¿Por qué usar getElement / sBy? *
Rendimiento más rápido.
¿Por qué esta diferencia de rendimiento?
Ambas formas de selección tienen el propósito de crear una NodeList para su uso posterior. querySelectors genera una NodeList estática con los selectores, por lo tanto, primero debe crearse desde cero.
getElement / sBy * adapta inmediatamente la NodeList en vivo existente del DOM actual.
Entonces, cuándo usar qué método depende de usted / su proyecto / su dispositivo.
Infos
Demostración de todos los métodos
NodeList Documentation
Performance Test
fuente
Devuelve una lista de tipo Array.
Haces de eso una matriz como ejemplo
fuente
Puede obtener un solo elemento ejecutando
pero va a funcionar para el primer elemento con la clase .myElement.
Si desea aplicar esto para todos los elementos con la clase, le sugiero que use
fuente
fuente
Con ES5 + (cualquier navegado hoy en día - 2017) debería poder hacer
fuente
Una respuesta para el caso específico de Drenzii ...
Puede hacer una función que funcione para cualquiera de los
word
elementos y pasar el número del que desea transformar, como:fuente