js div高亮提醒

有10个div,点击都有高亮提示,但是每次只能点两个,不是checkbox而是单纯的div包含内容,或者10段不同的文字,用js怎么实现呢?

阅读 4.8k
2 个回答

大体思路

  • 给每个div添加一个checked属性默认为false,
    div[i].checked = false;

  • 点击的同时改变当前div的checked属性,div[i].checked = !div[i].checked

  • 点击div的同时,遍历所有div的checked属性,如果有两个为checked,则return false退出函数,否则对该div的checked属性进行取反赋值。又有一些具体的条件判断,自己按照思路慢慢踩就出来。

给你个例子- -
直接查看实例:https://jsfiddle.net/677a1m6z/1/

html

    <div class="demo">高亮1</div>
    <div class="demo">高亮2</div>
    <div class="demo">高亮3</div>
    <div class="demo">高亮4</div>
    <div class="demo">高亮5</div>
    <div class="demo">高亮6</div>
    <div class="demo">高亮7</div>
    <div class="demo">高亮8</div>
    <div class="demo">高亮9</div>
    <div class="demo">高亮10</div>

css

    .demo {
        width: 140px;
        height: 30px;
        line-height: 30px;
        text-align: center;
        border: 1px solid;
        margin-bottom: 5px;
        box-sizing: border-box;
    }

    .active {
        background-color: #f55;
        color: #fff;
        border: 0;
    }

js

 $(document).on('click', '.demo', function() {
        $(this).addClass('active');
        var len = $('.active').length;
        //初始化处理最开始的两次点击
        if (len === 1) {
            $(this).addClass('c-1');
        }
        if (len === 2) {
            $(this).addClass('c-2');
        }
        //当已经有两个高亮,再次点击会取消最靠前一次点击的高亮
        //例如:先点击4和6,再点2则最靠前的4会被取消,再点7则最靠前的6又会被取消
        if (len === 3) {
            $('.c-1').removeClass('c-1 active');
            $('.c-2').removeClass('c-2').addClass('c-1');
            $(this).removeClass('c-1').addClass('c-2');
        }
    });

注:这里之所以用c-1、c-2标识符而不是index取active的元素,比如$('.active').eq(0)是因为index是有前后顺序的,会导致点击上一次高亮的元素之前或之后的元素总有一边失效。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题