题解 | #选择组件#

选择组件

http://www.nowcoder.com/practice/ed0bd346dc9c4184aacda183484a3a6f

function CheckGroup(renderTo, options, isMultiple) {
    var that = this;
    that.renderTo = renderTo;
    that.options = options;
    that.isMultiple = !!isMultiple;
    that.initHtml();
    that.initEvent();
}
CheckGroup.prototype.initHtml = fInitHtml;
CheckGroup.prototype.initEvent = fInitEvent;
CheckGroup.prototype.toggleEl = fToggleEl;
CheckGroup.prototype.isSelected = fIsSelected;
CheckGroup.prototype.val = fVal;

function fInitHtml() {
    var that = this;
    // 请补全代码,拼接html字符串
    var sHtml = '';
    var sHtmlInner = '';
    var options = this.options;
    for(let item of options){
        sHtmlInner+=`<div data-val="${item.value}" class="item">${item.text}</div>`
    }
    sHtml = `<div class="checkgroup radius">${sHtmlInner}</div>`;
    that.renderTo.innerHTML = sHtml;
    // 请补全代码,获取checkgroup的dom元素引用
    that.el = that.renderTo;
}

function fInitEvent() {
    var that = this;
    that.el && that.el.addEventListener('click', function (event) {
        var item = event.target;
        console.log(item);
        item.classList.contains('item') && that.toggleEl(item);
    });
}

function fToggleEl(item) {
    // 根据当前是单选还是多选,以及当前元素是否选中,高亮/取消���亮指定的选项dom元素
    var that = this;
    const value = item.dataset.val;
    var optionsDom = document.querySelectorAll('.checkgroup .item');
    if (that.isSelected(item)) {
        // 请补全代码
        item.classList.remove('selected');
    } else if (that.isMultiple) {
        // 请补全代码
        for(var i=0;i<optionsDom.length;i++){
            var item = optionsDom[i];
            if (item.dataset.val === value){
                item.classList.add('selected');
            }
        }
    } else {
        // 请补全代码
        for(var i=0;i<optionsDom.length;i++){
            var item = optionsDom[i];
            if (item.dataset.val === value){
                item.classList.add('selected');
            } else {
                item.classList.remove('selected');
            }
        }
    }
}

function fIsSelected(item) {
    // 请补全代码,判断item是否选中
    return item.classList.contains('selected');
}

function fVal(values) {
    var that = this;
    if (arguments.length === 0) {
        // 请补全代码,获取高亮的选项元素
        var items = document.querySelectorAll('.checkgroup .selected');
        // 请补全代码,获取高亮的选项元素的data-val
        var result = Array.from(items).map(item => item.dataset.val);
        return result;
    }
    !that.isMultiple && values.length > 1 && (values.length = 1);
    // 请补全代码,获取所有的选项元素
    var items = document.querySelectorAll('.checkgroup .item');
    // 请补全代码,在指定元素上加上高亮的class
    for(var i=0;i<values.length;i++){
        var value = values[i];
        for(var j=0;j<items.length;j++){
            var item = items[j];
            if (item.dataset.val === value){
                item.classList.add('selected');
            } else {
                if (!that.isMultiple){
                    item.classList.remove('selected');
                }
            }

        }
    }
}
全部评论

相关推荐

2025-11-08 21:43
济南大学 Java
1.3000~4000,一般对于双非本来说,hr能给出这种薪资,完完全全是侮辱人,而且我感觉是那种毛病贼多的小公司,遇上脾气不好的,能直接开骂,3-4k真的能招到人吗,属于是拉完了。2.4000~6000,可能是考研失败或者是hr看着是学校确实没那么好给出的价,如果是考研失败想找个地方过度一下准备二战的话,可以去一下,毕竟确实给的不多,校招都给这么点了,长期干的话薪资也不会涨到哪里去,这里给到npc。3.6000~8000,取中位数7k来看,除了某些提前规划大学生活,积累实习进入大厂的,我感觉这是大部分双非本能够拿到的工资,因为不管是boss上还是其他渠道,感觉普通后端开发都是这个数(以山东济南这边的情况来看),如果能双休而且是对口工作的话,这个薪资范围对双非本来说还是可以的,这里给到人上人。4.8000~10000,这个区间来看,感觉超越80%的双非本的同学了,如果你是9k而且双休,那简直是太舒服了,毕竟学历摆在那里,能拿到这个数,已经是“空调wifi冰镇西瓜”的级别了,这里必须夯爆了。5.10~15k,周围的同学极少能拿到这个数,甚至除了进大厂的同学们,很少看到双非本能拿到这个数,当然我指的是普通双非,但是能拿这个数,加班也少不了,而且如果能拿到这个数(相较于9k),那加班我感觉是少不了的,需要天天加班好几个小时,甚至双休都不能保证,但是能拿到这些数了,加会儿班就无可厚非了。第二点,如果能拿到这个薪资,那么这个同学肯定是在学习路上付出了很多的努力来弥补学历上带来的不足。在大学期间需要马不停蹄的来学习,如果也要严重加班的话,那综合来看,我会给到顶级。最后,目前我也是一名应届生,上述也是以山东目前的情况来说(如果是北上广深这样的城市那需要另外斟酌),以自己找工作的经历以及互联网上观察到的双非本的同学的秋招情况来看的,目前也还有好多的同学没有拿到心仪的offer,祝愿同学们拿到自己心仪的工作!!
一天代码十万三:都互联网了,就别看山东情况了
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务