el-select多选超过两个选项省略

前言

相信大家都遇到过这种情况:Element下拉框多选的时候有个毛病,就是选的数量过多就会把下拉框撑高,从而影响布局;但是如果使用了里面collapse-tags属性,element设置的只显示一个,超过一个就隐藏省略了,所以,针对以上限制,小谭做出了超过多个选择才省略的效果,效果如下:

好了 废话不多说,直接搂代码:

HTML

html 复制代码
<template>
    <el-select v-model="val" class="mySelect" multiple @change="onChange">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
    </el-select>
</template>

JS

javascript 复制代码
let span = document.createElement('span');
span.setAttribute('class', 'numContainer');
export default {
    data() {
        return {
            options: [
                {
                    value: '选项1',
                    label: '黄金糕',
                },
                {
                    value: '选项2',
                    label: '双皮奶',
                },
                {
                    value: '选项3',
                    label: '蚵仔煎',
                },
                {
                    value: '选项4',
                    label: '龙须面',
                },
                {
                    value: '选项5',
                    label: '北京烤鸭',
                },
            ],
            val: [],
        };
    },
    mounted() {
        document.querySelector('.mySelect').appendChild(span);
    },
    methods: {
        onChange() {
            // 这里的两个2可以自定义,如果需要实现超过三个选项省略则改为3,以此类推
            if (this.val instanceof Array && this.val.length > 2) {
                span.style.display = 'flex';
                span.innerHTML = `+${this.val.length - 2}`;
            } else {
                span.style.display = 'none';
            }
        },
    },
};

CSS

css 复制代码
.mySelect {
    ::v-deep .el-tag {
        // 这里的n + 3中的3,是你需要显示的数量+1,比如我需要实现超过两个选项隐藏,这里就是2 + 1
        &:nth-child(n + 3) {
            display: none;
        }
    }
    ::v-deep .el-select__tags {
        white-space: nowrap;
        overflow: hidden;
        flex-flow: nowrap;
        display: flex;
        flex-wrap: nowrap;
    }
    ::v-deep .el-select__tags-text {
        display: inline-block;
        max-width: 44px; // 根据select下拉框宽度设定,我这里宽度下拉框是 180左右 超出两个隐藏就设为44px了
        white-space: nowrap;
        overflow: hidden;
        flex-flow: nowrap;
        vertical-align: bottom;
        text-overflow: ellipsis;
    }
    ::v-deep.numContainer {
        position: absolute;
        top: 4px;
        right: 35px;
        text-rendering: optimizeLegibility;
        font-size: 12px;
        border-width: 1px;
        border-style: solid;
        border-radius: 4px;
        white-space: nowrap;
        height: 20px;
        padding: 0 5px;
        line-height: 19px;
        box-sizing: border-box;
        margin: 2px 0 2px 6px;
        display: none;
        align-items: center;
        background-color: #f4f4f5;
        border-color: #e9e9eb;
        color: #909399;
        z-index: 10;
    }
}
相关推荐
Hockor几秒前
写给前端的 Python 教程四(列表/元组)
前端·后端·python
GetcharZp1 分钟前
「DPlayer」超强弹幕视频播放器来了!支持m3u8直播,5分钟搞定集成!
前端
一颗奇趣蛋4 分钟前
vue性能优化(响应数据&静态数据)
vue.js·性能优化
天天码行空5 分钟前
Bootstrap Table企业级web数据表格集成框架
前端·javascript·开源
import_random9 分钟前
[关联规则]apriori算法和fp-growth算法(区别)
前端
lyc23333312 分钟前
鸿蒙IME Kit高级开发:共享沙箱与跨进程数据传输🚀
前端
lyc23333313 分钟前
鸿蒙UTD详解:标准化数据类型的跨端协作密钥🔑
前端
Hilaku13 分钟前
用好了 defineProps 才叫会用 Vue3,90% 的写法都错了
前端·javascript·vue.js
古夕14 分钟前
前端模块化与Webpack打包原理详解
前端·webpack
lyc23333314 分钟前
鸿蒙自定义编辑框:与输入法交互的3个核心步骤📝
前端