Eu tenho uma mesa com números. Quando clico em uma célula da tabela, alterna o estado ativo. Desejo selecionar uma célula e pressionar crtl e selecionar outra célula e, como resultado, as células entre a primeira e a segunda se tornarão ativas. Como implementá-lo?
codepen https://codepen.io/geeny273/pen/GRJXBQP
<div id="grid">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
<div class="cell">5</div>
<div class="cell">6</div>
</div>
const grid = document.getElementById("grid")
grid.onclick = (event) => {
event.stopPropagation();
const { className } = event.target;
if (className.includes('cell')) {
if (className.includes('active')) {
event.target.className = 'cell';
} else {
event.target.className = 'cell active';
}
}
}
Deve funcionar como destaque de turno e funciona nas duas direções
javascript
html
css
campo Verde
fonte
fonte
lastclick
dethisclick
e também verificarctrl
cliqueRespostas:
Tente o seguinte:
codepen
fonte
Programei a parte Javascript c completamente diferente do que você fez. Espero que você ainda possa usá-lo. Mas faz exatamente o que você pediu.
Com Shift + Cell, você pode selecionar todas as células no meio.
boa sorte ;)
fonte
Usando
previousElementSibling
ecompareDocumentPosition()
Demonstração de trabalho
https://codepen.io/aswinkumar863/pen/QWbVVNG
fonte
Solução completa com funcionalidade para frente e para trás:
fonte
Eu criei armazenando o índice do elemento selecionado. Funciona nos dois sentidos (2 -> 6) e (6-> 2)
fonte
Selecione um ou intervalo, mas se você pressionar Ctrl e clicar na terceira vez, a seleção anterior será redefinida e a nova partida será iniciada no 1º item (não é tão difícil de estender).
fonte
Com uma pequena modificação, você pode fazer o seguinte:
Mostrar snippet de código
Seguindo o comentário sobre isso não funcionar para trás, re-misturei ligeiramente o original para que ele funcione nas duas direções da seleção. A versão editada utiliza
dataset
atributos - neste caso, atribuídos como números inteiros. É mantido um registro da célula inicial clicada e, se octrl
tecla for pressionada, é feito um cálculo simples para determinar se o usuário está selecionando para frente ou para trás - o que, por sua vez, afeta o loop usado e, portanto, a atribuição da classe ativa. Um pequeno ajuste no CSS usando variáveis foi apenas por conveniência ...Mostrar snippet de código
fonte
Se você está aberto ao jquery, aqui está uma solução. Observe que ele não funciona na seleção reversa
fonte