Tengo una tabla con números. Cuando hago clic en una celda de la tabla, alterna el estado activo. Quiero seleccionar una celda y presionar crtl y seleccionar otra celda, y como resultado las celdas entre la primera y la segunda se activarán. ¿Cómo implementarlo?
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';
}
}
}
Debería funcionar como resaltado de turno y funciona en ambas direcciones
javascript
html
css
greenfield
fuente
fuente
lastclick
athisclick
y también verificar elctrl
clicRespuestas:
Prueba esto:
codepen
fuente
Programé el Javascript parte c ompletely diferente de lo que hizo. Espero que aún puedas usarlo. Pero hace exactamente lo que pediste.
Con Shift + Cell puede seleccionar todas las celdas intermedias.
buena suerte ;)
fuente
Usando
previousElementSibling
ycompareDocumentPosition()
Demo de trabajo
https://codepen.io/aswinkumar863/pen/QWbVVNG
fuente
Solución completa con funcionalidad hacia adelante y hacia atrás:
fuente
He creado almacenando el índice del elemento seleccionado. Funciona en ambos sentidos (2 -> 6) y (6-> 2)
fuente
Seleccione uno o intervalo, pero si presiona Ctrl y hace clic en la tercera vez, la selección anterior se restablece y comienza de nuevo desde el primer elemento (no es tan difícil de extender).
fuente
Con una ligera modificación puedes hacerlo así:
Mostrar fragmento de código
Siguiendo con el comentario sobre que esto no funciona al revés, volví a aplicar un poco al original para que funcione en ambas direcciones de selección. La versión editada utiliza
dataset
atributos, en este caso asignados como enteros. Se mantiene un registro de la celda inicial en la que se hace clic y, sictrl
se presiona la tecla, se realiza un cálculo simple para determinar si el usuario está seleccionando hacia adelante o hacia atrás, lo que a su vez afecta el ciclo utilizado y, por lo tanto, la asignación de la clase activa. Un pequeño ajuste al CSS usando variables fue solo por conveniencia ...Mostrar fragmento de código
fuente
Si estás abierto a jquery, aquí hay una solución. Tenga en cuenta que no funciona en la selección inversa
fuente