如何实现文本超出部分使用省略号

今天在做项目的过程中遇到一个问题,在这里贴出来让大神们想想更好的方法。

在显示数据时,字符串过长将截取一定长度的字符串然后加个省略号显示,可字母和汉字,大小写字母在显示时虽然length一样可显示的长度却不一样,有什么办法可以解决截取的字符串在实际显示时都是一样的呢?先说一下文本超出部分使用省略号的方法吧。

情况一:文本超出尾部使用省略号

  1. css实现(此方法只能在单行文本超出部分尾部省略)
<style type="text/css">
*{
margin:0;
padding:0;
}
body{
padding:10px;
}
#test {
position:relative;
width:150px;
height:20px;
line-height:20px;
text-overflow:ellipsis;
white-space:nowrap;
*white-space:nowrap;
overflow:hidden;
}
</style>

<body>
<div id="test">我要做程序员,加油加油加油加油加油加油加油加油加油</div>
</body> 

 注意:使用text-overflow:ellipsis对溢出文本显示省略号有两个好处,一是不用通过程序限定字数;二是有利于SEO。需要使用对对溢出文本 显示省略号的通常是文章标题列表,这样处理对搜索引擎更友好,因为标题实际上并未被截字,而是局限于宽度而未被显示而已。

通常的做法是这样的:
1.overflow:hidden;
2.text-overflow:ellipsis;
3.-o-text-overflow:ellipsis;
4.white-space:nowrap;
5.width:100%;

其中,overflow: hidden和white-space: nowrap都是必须的否则不会显示省略号;-o-text-overflow: ellipsis针对Opera;而宽度的设定主要是针对IE6;

  2.jquery实现(控制显示内容块的长度可单行或多行文本超出尾部省略,此方法不区分大小写和中文)

<p id="testStr">  
        这是很长的一段文本内容,测试是否能正常截取省略字符串.
</p>

$(document).ready(function(){
	$("#testStr").each(function(i){    
	    if($(this).text().length>25){  
	         //给td设置title属性,并且设置td的完整值.给title属性.  
	    	$(this).attr("title",$(this).text());  
	         //获取td的值,进行截取。赋值给text变量保存.  
	    	var text=$(this).text().substring(0,25)+"...";  
             //重新为td赋值;  
            $(this).text(text);  
	    }  
	});  
});

  3.jquery实现(长度按字节区分,一个汉字两个字节,一个英文一个字节)

html

<p id="testStr">这是很长的一段文本内容,测试是否能正常截取省略字符串.</p>

base.js

var Test = {
	subString:function(str, len, hasDot) {
	    var newLength = 0;
	    var newStr = "";
	    var chineseRegex = /[^\x00-\xff]/g; //中文字符正则
	    var singleChar = "";
	    var strLength = str.replace(chineseRegex,"**").length;
	    for(var i = 0;i < strLength;i++){
	        singleChar = str.charAt(i).toString();
	        if(singleChar.match(chineseRegex) != null){
	            newLength += 2;
	        }    
	        else{
	            newLength++;
	        }
	        if(newLength > len){
	            break;
	        }
	        newStr += singleChar;
	    }

	    if(hasDot && strLength > len){ //hasDot为true,截字后加省略号
	        newStr += "...";
	    }
	    return newStr;
	}
}

test.js

$(function(){
	var testStr = $("#testStr").text();
	var Str = Test.subString(testStr,14,true);
	$("#testStr").text(Str);
});

 

情况二:文本超出中间使用省略号,左右显示的文本长度相等,区分中英字符

  

html

<p id="testStr">这是很长的一段文本内容,测试是否能正常截取省略字符串.</p>

base.js

var Test = {
	subString:function(str, len, hasDot) {
	    var newLength = 0;
	    var newStr = "";
	    var chineseRegex = /[^\x00-\xff]/g; //中文字符正则
	    var singleChar = "";
	    var strLength = str.replace(chineseRegex,"**").length;
	    for(var i = 0;i < strLength;i++){
	        singleChar = str.charAt(i).toString();
	        if(singleChar.match(chineseRegex) != null){
	            newLength += 2;
	        }    
	        else{
	            newLength++;
	        }
	        if(newLength > len){
	            break;
	        }
	        newStr += singleChar;
	    }

	    if(hasDot && strLength > len){ //hasDot为true,截字后加省略号
	        newStr += "...";
	    }
	    return newStr;
	},
	subString2:function(str, len, hasDot) {
	    var newLength = 0;
	    var newStr = "";
	    var chineseRegex = /[^\x00-\xff]/g; //中文字符正则
	    var singleChar = "";
	    var strLength = str.replace(chineseRegex,"**").length;
	    for(var i = len;i < strLength;i++){
	        singleChar = str.charAt(i).toString();
	        if(singleChar.match(chineseRegex) != null){
	            newLength += 2;
	        }    
	        else{
	            newLength++;
	        }
	        if(newLength > len){
	            break;
	        }
	        newStr = singleChar + newStr;
	    }

	    if(hasDot && strLength > len){ //hasDot为true,截字后加省略号
	        newStr = "..." + newStr;
	    }
	    return newStr;
	}

}

test.js

$(function(){
	var testStr = $("#testStr").text();
	var Str = Test.subString(testStr,4,true);
	var Str2 = Test.subString2(testStr,4,false);
	$("#testStr").text(Str + Str2);
});

 最后,关于字母和汉字,大小写字母在显示时虽然length一样可显示的长度却不一样的问题,思考待续。

 

posted @ 2014-11-01 11:31  刘牛牛  阅读(480)  评论(0编辑  收藏  举报