JS实现中英文混合文字溢出友好截取功能

作者:闭包旅人时间:2026-10-22 16:34:56浏览:596

本文介绍在JavaScript中处理中英文混合字符串时,如何避免因中文字符占用宽度不同导致的显示溢出问题。通过封装自定义函数,根据字符实际字节长度进行智能截取,确保界面显示整齐美观,适用于需要固定宽度展示文本的场景。

中英文混合字符串截取背景

在展示字符串内容时,为了防止文本过长影响布局,通常会对字符串执行截取操作。常见的做法是使用JavaScript的 substr 或 substring 方法,并结合字符串的 length 属性来判断长度。

substr() 方法的功能是从字符串中指定起始下标 start 开始,提取指定数量的字符。

substring() 方法则用于提取字符串中位于两个指定下标之间的字符子串。

中文字符长度处理难点

对于非中文的字符串处理是很简单的,但是中文字符的 length 属性值 是1 而不是 2 ,所以处理就不是很友好了。

例如,假设有一个字符串 'abcdefg' 和另一个字符串 '我爱中华人民共和国'。

如果希望仅显示前五位长度的内容,常规的操作方式如下 str = str.substr(0, 5);

然而,'abcde ' 与 '我爱中华人' 在屏幕上所占的视觉宽度存在显著差异,因为中文字符通常占用两个字节的空间。为了获得更佳的显示效果,特封装如下函数进行处理:

友好截取函数实现


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>JS实现中英文混合文字溢出友好截取功能</title>
</head>
<body>
<script>
 /**
  * JS实现中英文混合文字溢出友好截取功能
  * @param text 字符串
  * @param length 截取长度
  */
 var zfc = {};
 zfc.mixTextOverflow = function (text, length) {
  if (text.replace(/[\u4e00-\u9fa5]/g, 'aa').length <= length) {
   return text
  } else {
   var _length = 0
   var outputText = ''
   for (var i = 0; i < text.length; i++) {
    if (/[\u4e00-\u9fa5]/.test(text[i])) {
     _length += 2
    } else {
     _length += 1
    }
    if (_length > length) {
     break
    } else {
     outputText += text[i]
    }
   }
   return outputText + '...'
  }
 }
 console.log(zfc.mixTextOverflow('留学NEW SAT essay 题目分析和汇总', 12))
</script>
</body>
</html>

运行结果与总结

输出结果:

中英文混合字符串截取背景

总结

以上所述是小编给大家介绍的JS实现中英文混合文字溢出友好截取功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!

作者最新文章