在没有HTML元素的JavaScript中基于像素宽度截断文本
我们有一个与Rhino JavaScript引擎集成的系统。 我们可以上传JavaScript文件来处理某些数据集 我需要根据像素宽度截断字符串,以避免它扩展有限大小的框。 但是不可能硬编码字符长度,因为长度取决于字符 如果这是一个普通的基于浏览器的HTML应用程序,我可以使用SPAN或DIV width来编写函数。但是在我的例子中,我不能使用任何HTML元素。所以我计划写一个函数,保持每个字符的像素宽度数组。 (在我的情况下,我只需要Arial Normal 10px) 但是我找不到资源来获取Arial的像素宽度。 谁能分享一个好的链接 如果您知道更好或更简单的解决方案,请让我知道 找到了解决方案:-) 我以编程方式编写了宽度数组 在C中,我使用了在没有HTML元素的JavaScript中基于像素宽度截断文本,javascript,string,rhino,truncate,Javascript,String,Rhino,Truncate,我们有一个与Rhino JavaScript引擎集成的系统。 我们可以上传JavaScript文件来处理某些数据集 我需要根据像素宽度截断字符串,以避免它扩展有限大小的框。 但是不可能硬编码字符长度,因为长度取决于字符 如果这是一个普通的基于浏览器的HTML应用程序,我可以使用SPAN或DIV width来编写函数。但是在我的例子中,我不能使用任何HTML元素。所以我计划写一个函数,保持每个字符的像素宽度数组。 (在我的情况下,我只需要Arial Normal 10px) 但是我找不到资源来获取
MeasureString()
方法
Font stringFont = new Font("Arial", 10);
String s="";
for (int i = 1; i < 256; i++) {
Char c = (char)i;
s = s + "widths[" + i + "]=" + CreateGraphics().MeasureString(c.ToString(), stringFont).Width.ToString() + ";\n";
}
MessageBox.Show(s);
最后,这是我的JavaScript函数
function smartTruncate(str,maxLen){
var widths = new Array();
widths[1]=19.54427;
//Assigning all above values
var len = 0;
for ( i =0; i < str.length ; i++){
var ascii = str.charCodeAt(i);
len = len + widths[ascii];
if (len>maxLen) {
if(i==0) {
i=1;
}
str = str.substring(0, i-1);
break;
}
}
return str;
}
函数smartTruncate(str,maxLen){
变量宽度=新数组();
宽度[1]=19.54427;
//分配所有上述值
var-len=0;
对于(i=0;imaxLen){
如果(i==0){
i=1;
}
str=str.substring(0,i-1);
打破
}
}
返回str;
}
function smartTruncate(str,maxLen){
var widths = new Array();
widths[1]=19.54427;
//Assigning all above values
var len = 0;
for ( i =0; i < str.length ; i++){
var ascii = str.charCodeAt(i);
len = len + widths[ascii];
if (len>maxLen) {
if(i==0) {
i=1;
}
str = str.substring(0, i-1);
break;
}
}
return str;
}