jQuery截取字符串插件区分中英文:
截取字符串功能在大量网站都有应用,比如新闻列表这样的功能,因为新闻的标题长途未必都是恰如其分的,所以要根据需要截取指定长度的字符串,下面就分享一个jQuery实现的插件,此插件能够截取指定长度的字符串,并且能够区分中英文。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>jQuery截取字符串插件区分中英文-蚂蚁部落</title>
<script type="text/javascript" src="http://www.softwhy.com/mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
(function($){
  $.extend($,{
    fixedWidth:function(str,length,char){
      str=str.toString();
      if(!char) char="...";
      var num=length-lengthB(str);
      if(num<0)
      {
        str=substringB(str,length-lengthB(char))+char;
      }
      return str;
      function substringB(str,length)
      {
        var num=0,len=str.length,tenp="";
        if(len)
        {
          for(var i=0;i<len;i++)
          {
            if(num>length) break;
            if(str.charCodeAt(i)>255)
            {
              num+=2;
              tenp+=str.charAt(i);
            }
            else
            {
              num++;
              tenp+=str.charAt(i);
            }
          }
          return tenp;
        }
        else
        {
          return null;
        }
      }
      function lengthB(str)
      {
        var num=0,len=str.length;
        if(len)
        {
          for(var i=0;i<len;i++)
          {
            if(str.charCodeAt(i)>255)
            {
              num+=2;
            }
            else
            {
              num++;
            }
          }
          return num;
        }
        else
        {
          return 0;
        }
      }
    }
  });
})(jQuery);
var str="蚂蚁部落欢迎您,希望您在这里能够有一定的收获";
document.write($.fixedWidth(str,20));
</script>
</head>
<body>
</body>
</html>

以上代码实现了截取字符串的功能,如果字符串超出了指定的长度,那么就会截取规定的长度,然后超出的以省略号替代,下面就介绍一下此插件的实现过程:
一.实现原理:
原理其实很简单的,下面就简单介绍一下:
1.为jQuery类库添加fixedWidth()方法:
实现这个是通过
$.extend()方法来实现的,这个函数式为jQuery类直接添加方法,也就是说添加的函数式静态方法,并非实例方法,关于 $.extend()函数可以参阅
$.extend()函数用法详解一章节。
2.关于中英文区分:
字符串的length属性返回值字符串中字符的个数,也就是说字符串中一个英文单词就是一个字符,一个汉字也是一个字符。但是一个英文字符和一个汉字在内存占据的空间是不一样的,一个英文字符占据一个字节,一个汉字占据两个字节。在这里是通过charCodeAt()函数判断的,如果返回值大于255的话,就说明汉字,那么num就会加2,否则就是英文字符,num加1。至于截取就更容易了,这里就不多说了,参阅代码注释即可。
二.代码注释:
1.(function($){})(jQuery),声明一个匿名函数,并执行此函数,参数是jQuery。
2.$.extend($,{}),为jQuery类库添加静态方法。
3.fixedWidth:function(str,length,char){},要被添加的方法,具有三个参数,str是要被截取的原字符串,length是要被截取的长度,char是自定义以何种形式作为超出内容的省略符号,比如默认状态下是"...",此参数是可选的。
4.var str=str.toString(),转换为字符串。
5.if(!char)
char="...",如果没有没有提供第三个参数,那么默认就是"..."。
6.var
num=length-lengthB(str),要截取的字符长度减去字符的长度,经过lengthB()函数计算,已经区分了中英文。
7.if(num<0){},如果小于0,也就是要截取的长度小于字符串的长度。
8.str=substringB(str,length-lengthB(char))+char,截取指定字符串长度,并加上char。
9.return str,如果要截取的长度大于字符串的长度,那么字符串将会被原样返回。
10function
substringB(str,length){},此函数用来截取字符串,具有两个参数,第一个参数要被截取的原字符串,第二个是要真正被截取的字符串的长度,这个长度是fixedWidth()函数中第二个参数减去被省略字符串替代字符的长度。
11.var num=0,len=str.length,tenp="";声明几个变量并赋值。
12.if(len),判断字符串是否是空字符串。
13.for(var
i=0;i<len;i++){},遍历字符串中的每一个字符。
14.if(num>length)
break,如果num大于真正要被截取的长度,就跳出本次循环。
15.if(str.charCodeAt(i)>255),判断指定索引的Unicode编码是否大约255,如果大于就是汉字,如果小于就是英文字符。
16.num+=2,将num加2.
17.tenp+=str.charAt(i),将指定索引的字符追加到tenp中。
18.else{num++;
tenp+=str.charAt(i)},如果是英文字符,num加1,再将指定索引的字符追加到tenp中。
19.return tenp,返回字符串。
20.function
lengthB(str){},声明一个函数,用来计算字符串的长度,区分中英文,原理这里就不说了,因为和上面介绍的大同小异。
三.相关阅读:
1.length属性可以参阅JavaScript的String对象的length属性一章节。
2.charCodeAt()函数可以参阅JavaScript的String对象的charCodeAt()方法一章节。

3.charAt()函数可以参阅JavaScript的String对象的charAt()方法一章节。

jQuery截取字符串插件区分中英文的更多相关文章

  1. C# 截取字符串,区分中英文情况

    public static string SubstringByCN(string strInput, int begin, int length) { if (!Regex.IsMatch(strI ...

  2. JS获取字符串长度(区分中英文)

    JS获取字符串长度(区分中英文) 中文算2个字,英文一个. function getStrLength(str) {      var cArr = str.match(/[^\x00-\xff]/i ...

  3. jQuery截取字符串、日期字符串转Date、获取html中的纯文本

    jQuery截取字符串.日期字符串转Date.获取html中的纯文本. var com = com || {}; (function ($, com) { /* * 截取字符串 * @param st ...

  4. jQuery截取字符串的几种方式

    在我们写前端JS代码的时候,我们会遇到只需要其中部分字符串的时候,下面我就提供集中截取字符串的方法: 1.取后缀 var fileDir = $("#file").val(); v ...

  5. jQuery截取字符串的几种方法

    1.取后缀 var fileDir = $("#file").val(); var suffix = fileDir.substr(fileDir.lastIndexOf(&quo ...

  6. js截取字符串区分汉字字母代码

    js截取字符串并且区分汉字字母,一个汉字辨别为两个字节. function substr(str, len) { if (!str || !len) { return ''; } // 预期计数:中文 ...

  7. javascript截取字符串(支持中英文混合)

    javascript截取字符串(支持中英文混合) <script type="text/javascript"> var sub=function(str,n){ va ...

  8. 用C#截取指定长度的中英文混合字符串

    很早以前写过一篇文章(用C#截取指定长度的中英文混合字符串),但是对性能没有测试,有人说我写的这个方法性能有问题,后来想,可能真会有BT之需求要求传入一个几万K甚至几M体积的字符串进来,那将会影响正则 ...

  9. jquery获取当前按钮、截取字符串、字符串拼接、动态循环添加元素

    截取字符串:字符串拼接:动态循环添加元素:获取当前按钮: {data : null, render: function(data, type, row ) { var loginName = $(&q ...

随机推荐

  1. 【转】推荐--《Android深入浅出》----不错

    原文网址:http://www.cnblogs.com/plokmju/p/Android_Book.html 承香墨影   推荐--<Android深入浅出> 基本信息 书名:Andro ...

  2. 字符串[未AC](后缀自动机):HEOI 2016 str

    超级恶心,先后用set维护right,再用主席树维护,全部超时,本地测是AC的.放心,BZOJ上还是1S限制,貌似只有常数优化到一定境界的人才能AC吧. 总之我是精神胜利了哦耶QAQ #include ...

  3. 科研论文提交流程与常见问题(EDAS 系统提交)

    第一步 注册文章(Registering your Paper) 如上图,点击菜单中的submit paper按钮,会列出所有的会议和期刊,选择一个你要投稿的期刊或者会议,例如选择第一个2013 IE ...

  4. C数组的相关知识

    数组的定义:具有相同数据类型的集合.在内存中开辟连续的存贮空间,从上往下,依次存储 补充:内存是以字节位单位的存储空间,内存中的每一个字节都唯一对应一个编号.这个编号就是地址.只要是存在内存中的数据都 ...

  5. 《Linear Algebra and Its Applications》-chaper3-行列式-行列式初等变换

    承接上一篇文章对行列式的引入,这篇文章将进一步记录关于行列式的有关内容,包括如下的几个方面: (1)行列式3个初等变换的证明. (2)转置行列式与原行列式相等的证明. (3)定理det(AB) = d ...

  6. 核心业务系统数据库平台迁移: Oracle -> MySQL

    为了对核心技术拥有更多的自主控制能力,为了解决数据库的线性扩展问题,为了尽量减少对商业软件的依赖,为了摆脱对高端硬件的依赖,为了… 基于以上多种原因,2年前,我们计划将公司某核心应用平台进行大手术:数 ...

  7. Servlet的接口实现类

    Sun公司提供了两个默认实现类 GenericServlet和HttpServlet HttpServlet指能够处理Http请求的Servlet,它在原有的Servlet基础上添加了与HTTp相关的 ...

  8. Linux 安全

     Linux 安全 1.安装 使系统处于单独(或隔离)的网络中.以防止未受保护的系统连接到其它网络或互联网中受到可能的攻击 安装完成后将下面软件卸载 pump                      ...

  9. 点击Enter键,文本框焦点改变 分类: WinForm 2014-04-15 10:30 223人阅读 评论(0) 收藏

    一个例子: 一个简单的 登陆界面,有用户名.密码文本框.登陆按钮.  想要实现的效果是,用户输入用户名之后,点击Enter键进入到下一个文本框,同理,输入完密码之后,登陆按钮获得焦点,再次点击Ente ...

  10. Spring Boot(spring mvc升级版)

    周末挤出了一些时间,学了点东西,总结了一下,可能还有自己理解不到位的地方,希望大家一起交流学习,好东西要大家一起分享嘛~.时间有点紧张,所以样式没有来及做很好的调整,大家就凑活着看吧. Spring ...