html
<div ref="btns" class="btns">
<div class="btn" >这是一段很短的文本.</div>
<div class="btn" >这是一段很短的文本.</div>
<div class="btn" >这是一段很长的文本.有省略号和tip.</div>
</div>
CSS
/* 使用 SASS 嵌套 */
.btns {
display: inline-flex;
.btn {
border: 1px solid #ccc;
padding: 10px;
margin: 15px;
cursor: pointer;
width: 150px; /* 定义一个固定宽度 */
white-space: nowrap; /* 确保文本不会换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 使用省略号 */
}
}
JavaScript
- 代码第
2 - 9行,判断html元素是否超出且有省略号; - 代码第
17 - 20行,超出则添加属性title,值是innerText;
// 判断是否有省略号
function hasEllipsis(element) {
// 获取元素宽度
const elementWidth = element.offsetWidth;
// 获取文本的实际宽度
const textWidth = element.scrollWidth;
// 如果元素宽度小于文本宽度,说明有省略号
return elementWidth < textWidth;
}
// btns
const btns = document.getElementById('btns');
// 子节点
const btnNodes = btns.childNodes;
for (let i = 0; i < btnNodes.length; i++) {
const node = btnNodes[i];
if(hasEllipsis(node)) {
console.log(node);
node.title = node.innerText;
}
}
效果如图
第三个按钮超出且有省略号,有tip信息。

PS
最近在学习 Vue3 组合式 API 写法如下:
<template>
<div ref="btns" class="btns">
<div class="btn" >这是一段很短的文本.</div>
<div class="btn" >这是一段很短的文本.</div>
<div class="btn" >这是一段很长的文本.有省略号和tip.</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
// 判断是否有省略号
function hasEllipsis(element) {
// 获取元素宽度
const elementWidth = element.offsetWidth;
// 获取文本的实际宽度
const textWidth = element.scrollWidth;
// 如果元素宽度小于文本宽度,说明有省略号
return elementWidth < textWidth;
}
// 定义 btns refs
const btns = ref(null);
onMounted(()=>{
// 子节点
const btnNodes = btns.value.childNodes;
for (let i = 0; i < btnNodes.length; i++) {
const node = btnNodes[i];
// 如果有省略号,加上 title
if(hasEllipsis(node)) {
node.title = node.innerText;
}
}
})
</script>
<style lang="scss">
.btns {
display: inline-flex;
.btn {
border: 1px solid #ccc;
padding: 10px;
margin: 15px;
cursor: pointer;
width: 150px; /* 定义一个固定宽度 */
white-space: nowrap; /* 确保文本不会换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 使用省略号 */
}
}
</style>

















![[开源] 基于GRU的时间序列预测模型python代码](https://img-blog.csdnimg.cn/direct/b4eda21ff10944fba9afff8afc864c23.png)
