js中按字节截取字符串

来源:互联网 发布:淘宝到付怎么弄 编辑:程序博客网 时间:2024/06/04 11:10
功能:在网页中显示过长的字符串,截取指定长度,结尾添加省略号。 

例如: 
testStr = "测试1字符串"; 
autoAddEllipsis(testStr, 1); // "测..." 
autoAddEllipsis(testStr, 2); // "测..." 
autoAddEllipsis(testStr, 3); // "测..." 
autoAddEllipsis(testStr, 4); // "测试..." 
autoAddEllipsis(testStr, 5); // "测试1..." 
autoAddEllipsis(testStr, 6); // "测试1..." 
autoAddEllipsis(testStr, 7); // "测试1字..." 

代码如下,其中全角半角判断部分isFull()的逻辑偷懒了,有特殊符号需求的可以自己定制。 
Js代码  收藏代码
  1. /* 
  2.  * 处理过长的字符串,截取并添加省略号 
  3.  * 注:半角长度为1,全角长度为2 
  4.  *  
  5.  * pStr:字符串 
  6.  * pLen:截取长度 
  7.  *  
  8.  * return: 截取后的字符串 
  9.  */  
  10. function autoAddEllipsis(pStr, pLen) {  
  11.   
  12.     var _ret = cutString(pStr, pLen);  
  13.     var _cutFlag = _ret.cutflag;  
  14.     var _cutStringn = _ret.cutstring;  
  15.   
  16.     if ("1" == _cutFlag) {  
  17.         return _cutStringn + "...";  
  18.     } else {  
  19.         return _cutStringn;  
  20.     }  
  21. }  
  22.   
  23. /* 
  24.  * 取得指定长度的字符串 
  25.  * 注:半角长度为1,全角长度为2 
  26.  *  
  27.  * pStr:字符串 
  28.  * pLen:截取长度 
  29.  *  
  30.  * return: 截取后的字符串 
  31.  */  
  32. function cutString(pStr, pLen) {  
  33.   
  34.     // 原字符串长度  
  35.     var _strLen = pStr.length;  
  36.   
  37.     var _tmpCode;  
  38.   
  39.     var _cutString;  
  40.   
  41.     // 默认情况下,返回的字符串是原字符串的一部分  
  42.     var _cutFlag = "1";  
  43.   
  44.     var _lenCount = 0;  
  45.   
  46.     var _ret = false;  
  47.   
  48.     if (_strLen <= pLen/2) {  
  49.         _cutString = pStr;  
  50.         _ret = true;  
  51.     }  
  52.   
  53.     if (!_ret) {  
  54.         for (var i = 0; i < _strLen ; i++ ) {  
  55.             if (isFull(pStr.charAt(i))) {  
  56.                 _lenCount += 2;  
  57.             } else {  
  58.                 _lenCount += 1;  
  59.             }  
  60.   
  61.             if (_lenCount > pLen) {  
  62.                 _cutString = pStr.substring(0, i);  
  63.                 _ret = true;  
  64.                 break;  
  65.             } else if (_lenCount == pLen) {  
  66.                 _cutString = pStr.substring(0, i + 1);  
  67.                 _ret = true;  
  68.                 break;  
  69.             }  
  70.         }  
  71.     }  
  72.       
  73.     if (!_ret) {  
  74.         _cutString = pStr;  
  75.         _ret = true;  
  76.     }  
  77.   
  78.     if (_cutString.length == _strLen) {  
  79.         _cutFlag = "0";  
  80.     }  
  81.   
  82.     return {"cutstring":_cutString, "cutflag":_cutFlag};  
  83. }  
  84.   
  85. /* 
  86.  * 判断是否为全角 
  87.  *  
  88.  * pChar:长度为1的字符串 
  89.  * return: true:全角 
  90.  *          false:半角 
  91.  */  
  92. function isFull (pChar) {  
  93.     if ((pChar.charCodeAt(0) > 128)) {  
  94.         return true;  
  95.     } else {  
  96.         return false;  
  97.     }  
0 0
原创粉丝点击