JS 實(shí)現(xiàn) Checkbox 中按住 Shift 的多選功能

操作方法

1.選中 A 項(xiàng)
2.按下 Shift
3.再選中 B 項(xiàng)
4.A-B 之間的所有項(xiàng)都被選中或者取消

實(shí)現(xiàn)方法

首先將獲取到的<input>組轉(zhuǎn)化為數(shù)組,針對每次操作,獲取A 和 B,利用 indexOf()來獲得 A 和 B 在數(shù)組中的索引值,由此即可確定范圍,并能通過 slice()來直接截取A-B的所有DOM元素,并進(jìn)行狀態(tài)改變的操作,而變量 onOff 表示 A-B范圍內(nèi)的狀態(tài),true 表示選中,false 表示取消選中。

const boxArr = Array.from(boxs);
let startChecked;
let onOff = false;

// 處理方法二:利用數(shù)組索引獲取需要選中的范圍
function handleCheck1(e) {
    if(!startChecked) startChecked = this;
    onOff = startChecked.checked ? true : false;
    if(e.shiftKey) {
        let start = boxArr.indexOf(this);
        let end = boxArr.indexOf(startChecked);
        boxArr.slice(Math.min(start, end), Math.max(start, end) + 1)
                   .forEach(input => input.checked = onOff);
        console.log(start + "+" + end);
    }
    startChecked = this;
}
  1. 轉(zhuǎn)換 Nodelist 為數(shù)組
const boxs = document.querySelectorAll('.inbox input[type="checkbox"]');
const boxArr = Array.from(boxs);

2.針對按下了 Shift 鍵的情況,獲取 A-B 范圍

let start = boxArr.indexOf(this);
let end = boxArr.indexOf(startChecked);

3.截取該范圍內(nèi)的數(shù)組元素,并改變選中狀態(tài)

boxArr.slice(Math.min(start, end), Math.max(start, end) + 1)
                   .forEach(input => input.checked = onOff);

4.確定選中 or 取消選中

onOff = startChecked.checked ? true : false;

5.標(biāo)記 A 值

if(!startChecked) startChecked = this;
/* ... */
startChecked = this;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容