Do getElementsByClassName
(e funções semelhantes, como getElementsByTagName
e querySelectorAll
) funcionam da mesma forma getElementById
ou eles retornar um array de elementos?
A razão pela qual pergunto é porque estou tentando alterar o estilo de todos os elementos usando getElementsByClassName
. Ver abaixo.
//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';
//works
document.getElementById('myIdElement').style.size = '100px';
getElementsByClassName()
implica um plural, enquantogetElementById()
implica um item de elemento singular.Respostas:
Seu
getElementById()
código funciona, pois os IDs precisam ser exclusivos e, portanto, a função sempre retorna exatamente um elemento (ounull
se nenhum foi encontrado).No entanto,
getElementsByClassName()
,querySelectorAll()
, e outrosgetElementsBy*
métodos de devolver uma colecção matriz semelhante de elementos. Faça uma iteração como você faria com uma matriz real:Se você preferir algo mais curto, considere usar o jQuery :
fonte
<iframe>
que também faz parte do seu domínioquerySelectorAll()
e você pode ter um código curto agradável sem uma grande dependência da velha escola.qSA(".myElement").forEach(el => el.style.size = "100px")
Talvez o wrapper receba um retorno de chamada.qSA(".myElement", el => el.style.size = "100px")
Você está usando uma matriz como objeto, a diferença entre
getElementbyId
egetElementsByClassName
é que:getElementbyId
retornará um objeto Element ou null se nenhum elemento com o ID for encontradogetElementsByClassName
retornará uma HTMLCollection ativa , possivelmente de comprimento 0, se nenhum elemento correspondente for encontradogetElementsByClassName
https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname
getElementById
https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById
no seu código as linhas:
vai NÃO funcionam como esperado, porque o
getElementByClassName
irá retornar uma matriz, e a matriz irá NÃO têm astyle
propriedade, você pode acessar cadaelement
por iteração através deles.É por isso que a função
getElementById
funcionou para você; essa função retornará o objeto direto. Portanto, você poderá acessar astyle
propriedade.fonte
A seguinte descrição é retirada desta página :
Portanto, como parâmetro
getElementsByClassName
, aceitaria um nome de classe.Se este é o seu corpo HTML:
em seguida
var menuItems = document.getElementsByClassName('menuItem')
, retornaria uma coleção (não uma matriz) dos 3<div>
s superiores , pois eles correspondem ao nome da classe.Em seguida, você pode iterar sobre essa
<div>
coleção de nós com este:Consulte este post para obter mais informações sobre as diferenças entre elementos e nós.
fonte
O ES6 fornece um
Array.from()
método, que cria uma nova instância Array a partir de um objeto iterável ou semelhante a uma matriz.Como você pode ver dentro do snippet de código, depois de usar a
Array.from()
função, você poderá manipular cada elemento.A mesma solução usando
jQuery
.fonte
Em outras palavras
document.querySelector()
selecciona apenas o primeiro um elemento do selector especificado. Portanto, não cuspir uma matriz, é um valor único. Semelhante aodocument.getElementById()
que busca apenas elementos de ID, pois os IDs precisam ser exclusivos.document.querySelectorAll()
seleciona todos os elementos com o seletor especificado e os retorna em uma matriz. Semelhante a apenasdocument.getElementsByClassName()
para classes edocument.getElementsByTagName()
tags.Por que usar querySelector?
É usado apenas com o único objetivo de facilidade e brevidade.
Por que usar getElement / sBy? *
Desempenho mais rápido.
Por que essa diferença de desempenho?
As duas formas de seleção têm como objetivo criar um NodeList para uso posterior. querySelectors gera um NodeList estático com os seletores, portanto, ele deve ser criado primeiro do zero.
getElement / sBy * adapta imediatamente o NodeList ativo existente do DOM atual.
Portanto, quando usar qual método depende de você / seu projeto / seu dispositivo.
Informações
Demonstração de todos os métodos
NodeList Documentation
Performance Test
fonte
Ele retorna uma lista semelhante a uma matriz.
Você faz disso uma matriz como exemplo
fonte
Você pode obter um único elemento executando
mas funcionará para o primeiro elemento com a classe .myElement.
Se você deseja aplicar isso a todos os elementos da classe, sugiro que você use
fonte
fonte
Com o ES5 + (qualquer navegador atualmente - 2017), você deve poder fazer
fonte
Uma resposta para o caso específico de Drenzii ...
Você pode criar uma função que funcione para qualquer um dos
word
elementos e passe o número daquele que você deseja transformar, como:fonte