Javascript 如何基于event.shiftKey为DOM中的元素选择生成事件?

Javascript 如何基于event.shiftKey为DOM中的元素选择生成事件?,javascript,html,events,Javascript,Html,Events,我无法理解如何使工作事件。将元素选择的条件从上一个目标元素移到在第一个之后单击的当前目标。。。其他条件也很好 附言。 不要通过按住shift键并左键单击来单击任何元素,因为这样会使页面崩溃 功能点击在线(事件){ var target=event.target; var li=menu.querySelectorAll('li'); 如果(target.tagName!=“LI”)返回; if(event.ctrlKey){ if(target.className!=“greenLi”){ t

我无法理解如何使工作
事件。将元素选择的条件从
上一个
目标
元素移到在第一个之后单击的
当前目标
。。。其他条件也很好

附言。 不要通过按住shift键并左键单击来单击任何元素,因为这样会使页面崩溃

功能点击在线(事件){
var target=event.target;
var li=menu.querySelectorAll('li');
如果(target.tagName!=“LI”)返回;
if(event.ctrlKey){
if(target.className!=“greenLi”){
target.classList.add('greenLi');
}else if(target.className=='greenLi'){
target.classList.remove('greenLi');
} 			
}
if(事件移位键){
target.className='greenLi';
对于(变量i=0;i

李{
光标:指针;
}
格林先生{
背景颜色:绿色;
}
  • БС
  • ббб
  • Б
  • Сааа
  • а

shiftKey事件正确,问题在于do while循环。您有3个状态需要检查。。。target,greenLi的classname,最后是前两个都不是的所有内容。 您的IF块应如下所示:

    if (event.shiftKey){
        target.className = 'greenLi';

        for (var i = 0; i < li.length; i++) {
            if (li[i].className == 'greenLi') {
                //do nothing
            }else if(li[i] != target){
                li[i].className = '';
            }
        }
    }
if(event.shiftKey){
target.className='greenLi';
对于(变量i=0;i
如果(event.shiftKey)
块中的逻辑不正确,则
中的逻辑不正确。替换您的:

if (event.shiftKey){
    ...
}

if(event.shiftKey){
target.className='greenLi';
让alreadySelectedLiIndex=-1;
让justSelectedLiIndex=-1;
对于(变量i=0;i如果(alreadySelectedLiIndexalreadySelectedLiIndex
)和target
li
的索引。在第二个循环中,我们将css类添加到已选择的
li
和target
li
之间的
lis
中,包括最后一个。希望有帮助:)
if (event.shiftKey){
    target.className = 'greenLi';
    let alreadySelectedLiIndex = -1;
    let justSelectedLiIndex = -1;

    for (var i = 0; i < li.length; i++) {
        if (li[i].className == 'greenLi' && li[i] != target)
            alreadySelectedLiIndex = i;
        if (li[i] == target)
            justSelectedLiIndex = i;

    }
    if (alreadySelectedLiIndex != -1){
        for (var i = 0; i < li.length; i++) {
            if (alreadySelectedLiIndex < i && i <= justSelectedLiIndex
               || justSelectedLiIndex <= i && i < alreadySelectedLiIndex){
               li[i].classList.add('greenLi');
            }
        }
    }
}