三行JS代码配合css解决element-ui selecct组件选项文本过长bug

 发布日期:2018-08-18 09:28:21  阅读次数:阅读数:443  来源:

项目中用到可下拉选择可输入框,于是自然想到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。如果你有更好的解决方法,欢迎来交流。

如果您有好的新闻与建议,欢迎点击文章投稿

    发表评论

    电子邮件地址不会被公开。

  • 内容

  • 网名