Filtrando elementos na DOM com JavaScript PURO!

Поделиться
HTML-код
  • Опубликовано: 1 окт 2024
  • Ofertas imperdíveis da Black Friday Rocketseat: rseat.in/Ofert...
    Pra chegar até aqui você provavelmente usou alguns sistemas de pesquisa. Como devs, estamos sempre pensado como as ferramentas do nosso dia a dia são criadas.
    Algumas podem ser simples, outras mais complexas. Algumas já foram até pedidas durante o teste técnico de entrevistas de emprego..
    No vídeo de hoje, Maykão mostra na prática como é criar um sistema de filtro para elementos DOM usando JavaScript na sua mais pura forma.
    Link do projeto inicial
    fronteditor.de...
    -----
    Conecte-se a 200mil devs e avance para o próximo nível com a nossa plataforma: rocketseat.com...
    Cadastre-se na nossa plataforma: app.rocketseat...
    Junte-se a mais de 392mil devs em nossa comunidade no Discord: / discord
    Acompanhe a Rocketseat nas redes sociais:
    Twitter: @rocketseat
    Facebook: @rocketseat
    Instagram: @rocketseat_oficial

Комментарии • 72

  • @aasdffut
    @aasdffut Год назад +9

    Excelente conteúdo. E disso que precisamos, pequenos projetos. Obrigado. Um dia apareço por aí na Rocktseat para fazer um curso.

  • @randomprofile9523
    @randomprofile9523 Год назад +1

    Como ficou minha solução:
    const cards = document.querySelectorAll('.cards li');
    const filterInput = document.getElementById('filter');
    function hasWhiteSpace(text) {
    return /\s/g.test(text);
    }
    filterInput.addEventListener('input', () => {
    const filterText = filterInput.value.toLowerCase();
    if (hasWhiteSpace(filterText)) return;
    for (const card of cards) {
    let cardTitle = card.querySelector('h2');
    cardTitle = cardTitle.textContent.toLowerCase();
    if (cardTitle.includes(filterText)) {
    card.style.display = 'block';
    } else {
    card.style.display = 'none';
    }
    }
    });

  • @upglobalinternacionalgomes3498
    @upglobalinternacionalgomes3498 5 месяцев назад

    Perfeito em didática, e muito bem planejado e explicado.
    Parabéns!

  • @guilhermeviola4477
    @guilhermeviola4477 Год назад +5

    Obrigado pelo conteudo de qualidade! Fiz primeiro com a sua resolução, depois testei com forEach e ternário.
    const filterInput = document.querySelector("#filter")
    const cards = document.querySelectorAll(".cards li")
    filterInput.addEventListener("input", filterCards)
    function filterCards() {
    if(filterInput.value !== "") {
    cards.forEach(card => {
    let title = card.querySelector("h2").textContent.toLowerCase()
    let filterText = filterInput.value.toLowerCase()
    !title.includes(filterText) ? card.style.display = "none" : card.style.display = "block"
    })
    } else {
    cards.forEach(card => {
    card.style.display = "block"
    })
    }
    }

    • @thatslifemg
      @thatslifemg Год назад +1

      Muito bom, amigo! Sempre bom melhorar o código.

    • @eulirico0002
      @eulirico0002 2 месяца назад

      Show de bola!!

  • @samueloliveira4465
    @samueloliveira4465 Год назад +8

    Maykão, onde você pega ideias para criar projetos como esse? Você me deu uma ideia, criar uma galeria de fotos onde você salva no banco imagens, aí depois pode apresentar em tela e buscar pela data de criação igual você fez no vídeo, em node e react.

    • @maykbrito
      @maykbrito Год назад +8

      Esse eu vi em algum vídeo do RUclips mesmo. Mas eu sempre fico vendo canais, artigos no medium e no Dev.to, no git e Twitter tbm… sempre vão aparecendo ideias soltas.. daí a gente mistura um pouco aqui e outro ali e acaba saindo as ideias 💛

    • @samueloliveira4465
      @samueloliveira4465 Год назад

      @@maykbrito Muito massa, obrigado por tirar um tempinho para responder.

  • @henriquepassos3825
    @henriquepassos3825 Год назад +5

    Esse foi um dos melhores métodos que vi para ensinar um iniciante em javascript, o passo a passo sem o código é essencial, pois o aluno precisa pensar em como resolver isso

    • @mikeiastomaz2918
      @mikeiastomaz2918 Год назад

      Depende, pelo q ouvi de muitos devs, é sempre bom começar com tudo pronto ("copiar código pronto"), vc vai entendendo os pedacinnhos aos poucos, testando, modificando-os e dominando o básico no processo, depois disso é q é melhor desafiar apenas com instruções, pq, os iniciantes mesmo, eles não fazem nem ideia do q deveria pesquisar, de como começar, ver as instruções/pseudo código e pensar em como "codá-las", não exatamente pra iniciantes.

  • @hudsondelimardrogies
    @hudsondelimardrogies Год назад +1

    Muito obrigado!

  • @AdemarMorais-bv4bv
    @AdemarMorais-bv4bv Месяц назад

    Muito bom seu trabalho Rocketseat! Tenho um site de filmes em html e queria saber se tem como filtrar os vídeos, tenho uns 150 filmes: imagens títulos e links para cada vídeo. Estrutura: section>container>movies-slides> a.movie-item> o poster e título . . .

  • @dbsdenis81
    @dbsdenis81 Год назад

    const filterElement = document.querySelector('header input')
    const cards = document.querySelectorAll('.cards li')
    filterElement.addEventListener('input', filterCards)
    function filterCards(){
    if(filterElement.value != ''){
    for (let card of cards){
    let title = card.querySelector('h2')
    .innerText
    .toLowerCase()
    let filterText = filterElement.value.toLowerCase()
    if(!title.includes(filterText)){
    card.style.display = 'none'
    }
    }
    }else{
    for (let card of cards){
    card.style.display = 'block'
    }
    }
    }

  • @jilherme
    @jilherme Год назад +2

    mt interessante essa questão do font-size 62.5% pra facilitar trabalhar com rem!!

  • @caioantunesdeoliveira3249
    @caioantunesdeoliveira3249 3 месяца назад

    Em 20 minutos de aula me ajudou a concluir o que eu queria a mais de 2 dias tentando. Muito obrigado!

  • @DCMapas
    @DCMapas Год назад +2

    8:27 gostei disso, acabei de usar em um projeto meu :D

  • @brendonalex4848
    @brendonalex4848 Год назад +1

    Alguém sabe dizer de quanto em quanto tempo abre a turma para o explore? Pretendo fazer próximo ano. No momento estou sem tempo.

  • @diegommagno
    @diegommagno Год назад +1

    Olha o has de novo hahah

  • @diegopaulino8727
    @diegopaulino8727 Год назад +1

    esse cara é monstro !!

  • @cssgabriel
    @cssgabriel Год назад +2

    Muito bom! Parabéns Rocketseat e Maicao .. fera demais

  • @mbs2488
    @mbs2488 Год назад +1

    S E N S A C I O N A L ! TUDO Muito bem explicado ! ! Parabéns pelos vídeos ! ! !

  • @helenamignogna2499
    @helenamignogna2499 11 месяцев назад

    Me ajudou muito! Obrigadaaa! 😃😃😃😃

  • @ericodesenvolvedor9618
    @ericodesenvolvedor9618 Год назад +2

    Ótimo conteúdo, um pequeno componente que faz toda a diferença, adorei!

  • @mbs2488
    @mbs2488 Год назад +1

    Excelente ! Muito bem explicado ! ! Parabéns pelos vídeos ! ! !

  • @guilbervieira
    @guilbervieira 8 месяцев назад

    rocketset tem forma de pagamento mensal ?

  • @gregollyfelipedefranca1468
    @gregollyfelipedefranca1468 Год назад

    Minha solução foi essa
    window.addEventListener('load', () => {
    const inputFilter = document?.querySelector('#filter')
    function handleFilterArticles(type) {
    const cards = document?.querySelectorAll('.cards li')
    const arrayCards = Array.from(cards)

    if(type !== "") {
    const filterCards = arrayCards.find((card) => card.childNodes[1].childNodes[3].innerHTML.toLowerCase() === type.currentTarget.value.toLowerCase().trim())
    if(filterCards) {
    arrayCards.forEach((card) => card.classList.add('hide'))
    filterCards.classList.remove('hide')
    }

    if(type.currentTarget.value === "") {
    arrayCards.forEach((card) => card.classList.remove('hide'))
    }
    }
    }

    inputFilter?.addEventListener('input', handleFilterArticles)

  • @andersonhipocreme822
    @andersonhipocreme822 Год назад +1

    Rapaz tava pensando hoje em fazer isso pra dar uma incrementada no projeto da copa e vcs postam isso kkkkk vlw

  • @klesionascimento9041
    @klesionascimento9041 Год назад +1

    Fiz dessa forma antes de ver o vídeo !
    let filter = document.querySelector('#filter');
    let cards = document.querySelectorAll('.cards li');
    addEventListener('keyup', () => {
    let value = filter.value;
    cards.forEach((element) => {
    let titleCards = element.children[0].textContent.trim().toLowerCase();
    if (value === '') {
    element.style.display = 'block';
    } else if (titleCards.includes(value)) {
    element.style.display = 'block';
    } else {
    element.style.display = 'none';
    }
    });
    });

  • @osmarbritodasilva6546
    @osmarbritodasilva6546 Год назад +1

    Esse Maykão eh tooop demais.
    Esquece copa do mundo....kkk

  • @luis.s.daniel
    @luis.s.daniel Год назад +1

    Cara, muito bom este "has".

  • @devtocruz6698
    @devtocruz6698 Год назад +8

    Me amarro em ver esses minis projetos simples e úteis 🤓

  • @branmendes2491
    @branmendes2491 Год назад +1

    Em menos de 10 minutos, adiantou um curso de 2 semanas.

  • @jailtonmendes8965
    @jailtonmendes8965 Год назад +1

    Muito Massa...

  • @geraldopcf
    @geraldopcf Год назад

    Muito show de bola, só queria deixar uma dica para evitar o uso de mais um else para mostrar todos os elementos quando não tem input:
    No lugar de if(filterElement.value != ' '){...} deixar apenas if(filterElement) {...} nesse caso ele vai aproveitar o else do for of que está dentro da condição if

  • @foconomeufuturo515
    @foconomeufuturo515 11 месяцев назад

    gente, não deu certo pra mim, meu código ta identico mas a parte de Js não funciona :(

    • @foconomeufuturo515
      @foconomeufuturo515 11 месяцев назад

      Meu Js só rodou corretamente dentro do meu arquivo html. Vou sobreviver.

  • @app2028
    @app2028 7 месяцев назад

    Seus vídeos são únicos um domínio digno do seu tempo é experiência parabéns.
    Sebastião de Goiânia Goiás 🎉

  • @doseemdobro
    @doseemdobro Год назад

    um tanto quanto parecido
    const input = document.querySelector('#filter');
    const cards = document.querySelectorAll('.cards li');
    input.addEventListener('input', filter_cards);
    function filter_cards(e) {
    const input_text = e.target.value;
    if(input_text) {
    cards.forEach((el) => {
    const title = el.querySelector('h2').innerText;
    const title_lowcase = title.toLocaleLowerCase();

    if(title_lowcase.includes(input_text) === false) {
    el.style.display = "none";
    console.log(el)
    }
    else {
    el.style.display = "block";
    }
    })
    }
    else {
    cards.forEach((el) => {
    el.style.display = "block";
    })
    }
    }

  • @luuysouza
    @luuysouza 10 месяцев назад

    Nossa, funcionou muito bem pro projeto que eu estava desenvolvendo!! muito obrigado!

  • @weslleyprado8499
    @weslleyprado8499 6 месяцев назад

    Porra Maicão cê é o cara, sempre tive muuuita dificuldade com JS e lógica, tava perdidinho não fazendo ideia em como estudar ou melhorar meu entendimento. Apliquei isso em um projeto pessoal e deu super certo, essa dica sobre voltar e fazer sozinho é sensacional, muito obrigado cara!!!

  • @math-rosa
    @math-rosa Год назад

    Me ajudou muito. Fiquei feliz de conseguir aplicar ao meu código. Obrigado Mayk. Excelente conteúdo.

  • @abraaocarvalho2923
    @abraaocarvalho2923 Год назад

    Cara, eu fiquei perdidinho na linha
    for(let card of cards) {
    }
    Tipo, nunca vi um for ser declarado dessa maneira, fui até no MDN pra vê algo semelhante, eu sou muito noob mesmo kkkk

  • @Matt_BB_21
    @Matt_BB_21 8 месяцев назад

    Acabei de aplicar no projeto aqui da empresa. Excelente explicação.

  • @joedsonferreira19
    @joedsonferreira19 Год назад

    Consegui fazer só com as orientações, o código não ficou tão profissional quanto o do mayk, mas funcionou kkkkk

  • @joaofelipelima7030
    @joaofelipelima7030 Год назад

    O link não tá funcionando, leva para arquivos em branco ;-;

  • @marcosbarros883
    @marcosbarros883 5 месяцев назад

    Essa aula do Maykão ficou simplesmente sensacional. 👏

  • @tagata20
    @tagata20 Год назад +1

    Parece q leu minha mente. Era exatamente isso oq precisava no momento. Obrigada! ❤️

    • @mikeiastomaz2918
      @mikeiastomaz2918 Год назад

      Eu já tinha encontrado alguns videos q ensinavam basicamente a mesma coisa, mas esse é de longe uma das versão mais atualizadas e clean q eu achei.

  • @joaobraz612
    @joaobraz612 Год назад +1

    Projetinho top demais

  • @cassianocominetti7784
    @cassianocominetti7784 Год назад

    Muito bom! Além de ajudar a melhorar a lógica, é algo que pode ser utilizado no dia a dia! Valeu Maykão!

  • @gabrielribeiro5520
    @gabrielribeiro5520 Год назад

    para fazer um loop qual seria a melhor opção? forEach? for of? tem diferença?

  • @willianfonseca310
    @willianfonseca310 Год назад

    Salve

  • @lammad
    @lammad Год назад

    Mano, top demais. Vou fazer. Obrigado demais aí.

  • @lucas5967g
    @lucas5967g Год назад

    Mayk, sou iniciante e tenho dificuldade. Comecei a assistir vídeos de javascript para ver como as pessoas codam as coisas, como por exemplo: uma calculadora, um jogo da velha, um dark mode, um formulário e até mesmo esse sistema de filtro do vídeo, que aliás ficou excelente maykao! Você acha que é uma boa ideia eu primeiro assistir esses vídeos onde as pessoas codam pra que eu veja como é feito, e depois tentar reproduzir oque foi feito sozinho? Sem olhar no vídeo, sem nada?

    • @maykbrito
      @maykbrito Год назад

      Fala Lucas! Tô vendo sua mensagem agora. Eu acho excelente você aprender assistindo como os outros fizeram. É uma maneira de você ir entendendo a lógica das coisas. Depois que vc entendeu olhando, é importante você fazer e forçar ao máximo não olhar. Mas, olhe quantas vezes forem necessárias até que você tenha capacidade de fazer sozinho. Isso leva tempo e prática. Assim como eu posso assistir as pessoas tocando alguma música, eu só vou saber tocar aquela música quando eu praticar muito. Ou, vendo um jogador fazendo uma jogada bonita, onde eu posso entender como ele fez, mas eu só vou saber fazer se eu praticar muito. Então, segue assistindo a fim de entender, depois, pratique muito a fim de aprender! Abração

  • @hwgotv
    @hwgotv Год назад

    Mayk é brabo demais!

  • @own4ge
    @own4ge Год назад +1

    Cadê o link do projeto?

    • @rocketseat
      @rocketseat  Год назад +2

      Coloquei na descrição agora 😍

  • @leonardoantoniomaundokabon786
    @leonardoantoniomaundokabon786 Год назад

    grande Mayk valeu

  • @josejunior9577
    @josejunior9577 Год назад

    Maneiro demais!!!

  • @pedrocarvalho03
    @pedrocarvalho03 Год назад

    Maykão god dms

  • @weversonessin2448
    @weversonessin2448 Год назад

    show

  • @joaofelipelima7030
    @joaofelipelima7030 Год назад

    Muito bom!!

  • @felipejre
    @felipejre Год назад

    Lá ele

  • @samukarbrj
    @samukarbrj Год назад

    kd o código inicial kkk

    • @maykbrito
      @maykbrito Год назад +1

      Kkkk faltou eu enviar. Coloquei agora na descrição

    • @samukarbrj
      @samukarbrj Год назад

      @@maykbrito muito obrigado! to aprendendo bastante no canal!

  • @nelson.costa.dev2536
    @nelson.costa.dev2536 Год назад +1

    tava assistindo a copa e parei kakaka