项目中用到可下拉选择可输入框,于是自然想到element-ui的select组件。当select组件的下拉选项不满足要求时用户可以输入自己需要的选项。那么问题来了。在某种特殊的情况下,输入的文本过长,而select组件的宽度是固定的(从页面美观的角度基本不允许文本框宽度自适应),这样输入的文本会溢出select组件。
接下来我们分两步来解决这个问题。

1)CSS控制宽度,给输入项一个固定的宽度,当文本超过指定宽度会显示省略号

.el-select__tags-text {
      display: inline-block;
      width: 40px;
      overflow: hidden;
      text-overflow:ellipsis;
      white-space: nowrap; 
}

2)如何显示全部文本

方法一:伪类

当鼠标移动到文本上时,宽度width:auto;此时能显示全部内容,但有个明显的确定会对布局产生破坏。

方法二: 动态添加title

这是本文的重点,当给输入项或者选择项设置一个title时,鼠标移动到选项上会显示title的全部内容。所以问题的关键是如何动态的给每个select组件选项动态添加title.请看下面图片和代码。
这里写图片描述

setTagTitle() {
        var tagTextList = document.querySelector('#app').querySelectorAll('.el-select__tags-text')
        tagTextList.forEach( (item) => {
          item.setAttribute('title', item.innerText)
        })
 }

输入项对应的span标签class名为el-select__tags-text,通过选择器querySelector选择所有的选项。然后对所有的选项进行遍历动态添加title属性。title的值就是每个选项的文本值。那么这个事件如何触发呢,可以监听select组件的visible-change事件。
这里写图片描述

第二种方式是我能想到比较好解决过长文本的bug。如果你有更好的解决方法,欢迎来交流。

GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45 7 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐