Estou tentando obter a extensão filho que tem uma classe = 4. Aqui está um elemento de exemplo:
<div id="test">
<span class="one"></span>
<span class="two"></span>
<span class="three"></span>
<span class="four"></span>
</div>
As ferramentas que tenho disponíveis são JS e YUI2. Eu posso fazer algo assim:
doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');
//or
doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');
Estes não funcionam no IE. Eu recebo um erro que o objeto (doc) não suporta esse método ou propriedade (getElementsByClassName). Eu tentei alguns exemplos de implementações entre navegadores de getElementsByClassName, mas não consegui fazê-las funcionar e ainda assim recebi esse erro.
Eu acho que o que eu preciso é um getElementsByClassName entre navegadores ou preciso usar doc.getElementsByTagName ('span') e percorrer até encontrar a classe 4. No entanto, não tenho certeza de como fazer isso.
javascript
yui
spyderman4g63
fonte
fonte
querySelectorAll
é suportado pelo IE 8+, enquanto ogetElementsByClassName
IE 9+ é suportado apenas. Se você pode largar o IE 7, é seguro usá-loquerySelectorAll('.4')
. A propósito,4
é um nome de classe inválido.document.querySelectorAll
é DOM e não tem nada a ver com YUIRespostas:
Use
doc.childNodes
para percorrer cada umspan
e, em seguida, filtre aquele cujoclassName
é igual a4
:O que outras pessoas estão dizendo
fonte
className
maneira:if(doc.childNode[i].className.match("\s*" + search_class + "\s*")
onde a variávelsearch_class
é o nome da classe que você está procurando.Use querySelector e querySelectorAll
IE9 e superior
;)
fonte
A resposta aceita apenas verifica filhos imediatos. Muitas vezes, procuramos descendentes com esse nome de classe.
Além disso, às vezes queremos qualquer filho que contenha um className.
Por exemplo:
<div class="img square"></div>
deve corresponder a uma pesquisa no className "img", mesmo que o className exato não seja "img".Aqui está uma solução para esses dois problemas:
Encontre a primeira instância de um elemento descendente com a classe
className
fonte
Use element.querySelector (). Vamos supor: 'myElement' é o elemento pai que você já possui. 'sonClassName' é a classe do filho que você está procurando.
Para mais informações, visite: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
fonte
let child = myElement.querySelector('sonClassName');
no meu casoVocê poderia tentar:
ou
fonte
Para mim, parece que você quer o quarto período. Nesse caso, você pode apenas fazer o seguinte:
ou
Este último garante que não haja nós ocultos que possam atrapalhar.
fonte
TagName
é isso aí! Tão simples..firstChild
e.firstChildElement
emboraMas lembre-se de que navegadores antigos não suportam
getElementsByClassName
.Então você pode fazer
Parece que funciona, mas saiba que uma classe HTML
fonte
Use o nome do ID com o sinal
getElementById
sem#
sinal antes dele. Em seguida, você pode obter osspan
nós filhos usandogetElementsByTagName
e percorrê-los para encontrar aquele com a classe certa:Demonstração: http://jsfiddle.net/Guffa/xB62U/
fonte
getElementsByTagName
método funciona no IE 8. Ele é suportado desde o IE 5.5. developer.mozilla.org/pt-BR/docs/DOM/…Na minha opinião, sempre que puder, use Array e seus métodos. Eles são muito, muito mais rápidos do que percorrendo todo o DOM / wrapper ou empurrando coisas para uma matriz vazia. Maioria das soluções apresentadas aqui, você pode chamar Naive como descrito aqui (ótimo artigo entre):
https://medium.com/@chuckdries/traversing-the-dom-with-filter-map-and-arrow-functions-1417d326d2bc
Minha solução : (visualização ao vivo no Codepen: https://codepen.io/Nikolaus91/pen/wEGEYe )
fonte
A maneira como farei isso usando jquery é algo como isto ..
fonte
Aqui está uma solução recursiva relativamente simples. Eu acho que uma pesquisa pela primeira vez é apropriada aqui. Isso retornará o primeiro elemento correspondente à classe encontrada.
fonte
Você pode buscar a classe pai adicionando a linha abaixo. Se você tivesse um ID, seria mais fácil
getElementById
. Não obstante,Em seguida, você pode usar
querySelectorAll
no pai<div>
para buscar todos osdiv
s correspondentes com a classe.progress__marker
querySelectorAll
vai buscar todosdiv
com a classe deprogress__marker
fonte
Solução moderna
documentação
fonte
Atualização de junho de 2018 para ES6
fonte
O YUI2 possui uma implementação entre navegadores de
getElementsByClassName
.fonte
getElementsByClassName
é um método deYAHOO.util.Dom
. No seu caso, a ligação seria semelhante aYAHOO.util.Dom.getElementsByClassName('four', 'span', 'test')
. Você provavelmente deve ler os documentos para obter uma compreensão mais detalhada do que essa chamada está fazendo. A versão curta é que ele agora vai procurarspan
elementos com a classefour
sob o elemento DOM comtest
como seuid
.get
chamada é apenas um elemento DOM. A YUI não adota o tipo de abordagem 'embrulhar tudo em um objeto específico de estrutura' de venda inteira que algo como o jQuery faz, nem faz o patch de objetos nativos como o Prototype (não é? Não brinquei com o Protoype para sempre). Nesse aspecto, o YUI é mais parecido com o Dojo.Aqui está como eu fiz isso usando os seletores YUI. Graças à sugestão de Hank Gay.
onde quatro = nome da classe, extensão = o tipo de elemento / nome do tag e test = o ID pai.
fonte
Use
YAHOO.util.Dom.getElementsByClassName()
a partir daqui .fonte