Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

268
Visualizações
¿Cómo establecer un nombre de clase que dependa de otro atributo del mismo elemento en Svelte?

Quiero establecer una clase condicional basada en un atributo del mismo elemento para poder permanecer seco. Al principio obtuve esto:

 <div class="hidden md:flex items-center space-x-3"> <a href="#Index" class="navBarLink {currentPageName == 'Index' ? 'activeLink' : ''}">Farm</a> <a href="#/Leaderboard" class="navBarLink {currentPageName == 'Leaderboard' ? 'activeLink' : ''}">LeaderBoard</a> <a href="#/WafBox" class="navBarLink {currentPageName == 'WafBox' ? 'activeLink' : ''}">WafBox</a> <a href="#/Buy" class="navBarLink {currentPageName == 'Buy' ? 'activeLink' : ''}">Buy</a> <a href="#/Info" class="navBarLink {currentPageName == 'Info' ? 'activeLink' : ''}">Info</a> </div>

Ahora me gustaría esto:

 <div class="hidden md:flex items-center space-x-3"> <a href="#Index" class="navBarLink {isActive(this)}">Farm</a> <a href="#/Leaderboard" class="navBarLink {isActive(this)}">LeaderBoard</a> <a href="#/WafBox" class="navBarLink {isActive(this)}">WafBox</a> <a href="#/Buy" class="navBarLink {isActive(this)}">Buy</a> <a href="#/Info" class="navBarLink {isActive(this)}">Info</a> </div>

Entonces simplemente tendría que verificar el atributo de href en mi función isActive . Pero aquí this no parece tener la información correcta dentro. Hay una manera de hacerlo ? Limpiaría mucho mi código.

Editar: isActive() se vería así:

 <script> function isActive(element) { return 'Active' if (currentPageName == element.attr('href')) } </script>

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Un problema con su enfoque es que tanto en

 <a href="#/Leaderboard" class="navBarLink {isActive(this)}">LeaderBoard</a>

y la respuesta propuesta usando la class:directive

 <a href="#Index" class:active-link={isActive('Index')}>Index</a>

es que la función solo se ejecutará una vez , en el primer procesamiento y luego nunca se volverá a ejecutar, ni siquiera cuando currentPageName .

La solución directa más obvia sería simplemente deshacerse de la llamada de función y usar la clase: directiva de esta manera:

 <a href="#Index" class:active-link={currentPageName == 'Index'}>Index</a>

esto asegurará que las clases cambien a medida que cambia currentPageName.

about 4 years ago · Juan Pablo Isaza Relatório

0

Al declarar la función con la sintaxis de flecha y hacerla reactiva agregando $: parece que, alternativamente al uso de la class:directive (que verifica si el valor es verdadero/falso), el nombre de la clase podría establecerse directamente dentro del atributo class="" como bien

UN REEMPLAZO

 <script> let currentPageName = 'Index' $: isActive = (linkText) => { if (linkText === currentPageName) return 'active-link' // else if (...) return 'other-class-name' // possible class name switch else return '' } </script> <div class=""> <a href="#Index" class="{isActive('Index')}">Index</a> </div> <div class=""> <a href="#Leaderboard" class="{isActive('Leaderboard')}">Leaderboard</a> </div> <br> <button on:click={() => currentPageName = 'Leaderboard'}>change currentPageName</button> <style> .active-link { color: purple; } </style>
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda