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

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

在显示数据时,字符串过长将截取一定长度的字符串然后加个省略号显示,可字母和汉字,大小写字母在显示时虽然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一样可显示的长度却不一样的问题,思考待续。

时间: 2024-11-05 11:54:12

如何实现文本超出部分使用省略号的相关文章

css文本超出部分用省略号表示

以前我在面试中遇到过这个问题,当时没答上来,现在回答一下: 1.设置三个属性: overflow:hidden   (超出部分隐藏) white-space:nowrap    (强制不换行) text-overflow:ellipsis     (文本超出用三个省略号代替) 2.代码部分截图: 3.最终效果: 原文地址:https://www.cnblogs.com/zhangnan35/p/11109210.html

css3 文本超出后出现省略号

clip:当内联内容溢出块容器时,将溢出部分裁切掉. ellipsis:当内联内容溢出块容器时,将溢出部分替换为(...). 当块容器 <' overflow '> 为非visible时,定义内联内容溢出其块容器是否截断或者添加(...)及自定义字符 要使得 <' text-overflow '> 属性生效,块容器必须显式定义 <' overflow '> 为非visible值,同时显式或者隐式的定义 <' width '> 为非auto值, <' w

css中文本超出部分省略号代替

p{ width: 100px; //设置p标签宽度 white-space: nowrap; //文本超出P标签宽度不换行,而是溢出 overflow: hidden; //文本超出P标签,超出部分隐藏 text-overflow: ellipsis; //CSS3的新属性:显示省略号代替被修剪的文本:其他两个属性:1.clip-修剪文本,2.string-使用给定的字符串来代表被修剪的文本 }

文本超出用省略号代替

单行文本超出省略号显示 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 多行文本超出省略号显示 height:xx; // 将height设置为line-height的整数倍,防止超出的文字露出. overflow: hidden; //超出隐藏 text-overflow: ellipsis; //文本超出用省略号显示 display: -webkit-box; //显示方式(为弹性伸缩盒子模型显示) -webkit

CSS控制文本超出指定宽度后用省略号代替,CSS控制文本不换行

CSS控制文本超出指定宽度后用省略号代替,CSS控制文本不换行. 一般的文字截断(适用于内联与块): .text-overflow {     display:block;/*内联对象需加*/     width:31em;     word-break:keep-all;/* 不换行 */     white-space:nowrap;/* 不换行 */     overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */     text-overflow:ellipsis;

超出文本截取替换为省略号

今天做了一个如下图的模块 其中,标题以及介绍这两块都需要做超出某个宽度就截取一行或两行文字,后面用省略号代替. 由于是做的手机页面,用JS来开销太大,只能从CSS入手. 一行的很好解决. 如下就OK了. white-space:nowrap;overflow:hidden;text-overflow:ellipsis; 多行的想了很久,比如,写定行高,超出隐藏,弄个省略号作为补丁打在尾部.但是有个问题,页面宽度不固定,可能会出现只遮住一半字的情况,看起来很Low. 继续查找资料,CSSV5啊!

CSS控制TD内的文本超出指定宽度后不换行而用省略号代替

<style type="text/css"> .lineOverflow { width: 100px; border:#000 solid 1px; text-overflow: ellipsis; white-space: nowrap;/*禁止自动换行*/ overflow: hidden; } </style> <table style="table-layout:fixed; width: 200px;"> <t

CSS控制文本超出指定宽度显示省略号和文本不换行

一般的文字截断(适用于内联与块): .text-overflow { display:block;/*内联对象需加 */ width:31em;/* 何问起 hovertree.com */ word-break:keep-all;/* 不换行 */ white-space:nowrap;/* 不换行 */ overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */ text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) :需与overfl

文本超出显示省略号/数字字母折行有关css 属性

文本超出显示省略号: 定容器宽度 overflow: hidden; text-overflow: ellipsis; 文本超出显示省略号 white-space:nowrap;  强制文本不换行 折行 word-break:break-all;  英文单词会分开折行 word-wrap:break-word; 英文单词完整处折行 令拓展: word-spacing :5px;  单词/字符之间间隔距离   white-space是字符是否换行显示的. 原文地址:https://www.cnbl