Javascript 找出;“图形长度”;以单空格字母表示的字符串
我有一个字符串,可以包含unicode字母。我想知道,当它以单空间字体写在屏幕上时,它的“宽度”(字母,而不是像素)有多大 它可能不像看上去那么琐碎。考虑这个代码:Javascript 找出;“图形长度”;以单空格字母表示的字符串,javascript,unicode,Javascript,Unicode,我有一个字符串,可以包含unicode字母。我想知道,当它以单空间字体写在屏幕上时,它的“宽度”(字母,而不是像素)有多大 它可能不像看上去那么琐碎。考虑这个代码: var la = "لا" console.log(la.length); // prints 2 console.log(la.split); // [ 'ل', 'ا' ] 在几乎所有单空格字体中,لا的宽度为1个字母,但实际上是2个字母-ل和ا(忽略书写方向问题,这是另一回事:) 有没有可能在Javascript中找到“
var la = "لا"
console.log(la.length); // prints 2
console.log(la.split); // [ 'ل', 'ا' ]
在几乎所有单空格字体中,لا
的宽度为1个字母,但实际上是2个字母-ل
和ا
(忽略书写方向问题,这是另一回事:)
有没有可能在Javascript中找到“可视宽度”(或者如何准确地称呼它)
在我的示例中,我希望有一个函数,我在其中输入لا
,结果将是1
,而不是2
,如.length
(抱歉,如果这太让人困惑了,我只是不知道如何正确表达自己。)
我能找到的所有东西都是以像素为单位的宽度。我想知道“单空格字母”的宽度。这个字符串在单空格中需要多少字母
如果不可能,那就没事了
编辑:
我发现用css和文本溢出做我想做的事情要容易得多:省略号。但是,我将把这个问题保留在这里,也许它对其他人会有帮助。一种总的解决方案是将字符串放入div中,得到像素宽度,然后除以单个字符的像素宽度。这对于处理性能来说很糟糕,但应该是准确的,因为固定宽度字体中的每个字符都应该具有相同的水平空间。一种总的解决方案是将字符串放入div中以获得像素宽度,然后除以单个字符的像素宽度。这对于处理性能来说很糟糕,但应该是准确的,因为固定宽度字体中的每个字符都应该具有相同的水平空间。一种总的解决方案是将字符串放入div中以获得像素宽度,然后除以单个字符的像素宽度。这对于处理性能来说很糟糕,但应该是准确的,因为固定宽度字体中的每个字符都应该具有相同的水平空间。一种总的解决方案是将字符串放入div中以获得像素宽度,然后除以单个字符的像素宽度。这对于处理性能来说很糟糕,但应该是准确的,因为固定宽度字体中的每个字符都应该具有相同的水平空间。您可以使用单空间字体创建画布。然后,您可以测量字符串的宽度和单个字母的宽度,并将它们分开
var countlets=(函数(){
var ctx=document.createElement('canvas').getContext('2d');
ctx.font='48px monospace';
var letterWidth=ctx.measureText('a').width;
返回函数(str){
返回数学圆(ctx.measureText(str.width/letterWidth);
};
})();
我认为
Math.round
应该没有必要,但它可以保证结果是整数。您可以使用单空格字体创建画布。然后,您可以测量字符串的宽度和单个字母的宽度,并将它们分开
var countlets=(函数(){
var ctx=document.createElement('canvas').getContext('2d');
ctx.font='48px monospace';
var letterWidth=ctx.measureText('a').width;
返回函数(str){
返回数学圆(ctx.measureText(str.width/letterWidth);
};
})();
我认为
Math.round
应该没有必要,但它可以保证结果是整数。您可以使用单空格字体创建画布。然后,您可以测量字符串的宽度和单个字母的宽度,并将它们分开
var countlets=(函数(){
var ctx=document.createElement('canvas').getContext('2d');
ctx.font='48px monospace';
var letterWidth=ctx.measureText('a').width;
返回函数(str){
返回数学圆(ctx.measureText(str.width/letterWidth);
};
})();
我认为
Math.round
应该没有必要,但它可以保证结果是整数。您可以使用单空格字体创建画布。然后,您可以测量字符串的宽度和单个字母的宽度,并将它们分开
var countlets=(函数(){
var ctx=document.createElement('canvas').getContext('2d');
ctx.font='48px monospace';
var letterWidth=ctx.measureText('a').width;
返回函数(str){
返回数学圆(ctx.measureText(str.width/letterWidth);
};
})();
我认为
Math.round
应该没有必要,但它可以保证结果是一个整数。将文本放在一个跨度内并检测跨度的宽度如何?试试这个:可能重复@KarelBílek你是对的,这个概念在那个问题中,但它实际上并没有回答这个特定的问题-投票被删除。在ES6中,您可以使用[…str].length
获得字符超过16位的字符串的实际长度。例如,'\uD83D\uDE80'。长度
为2,但[…'\uD83D\uDE80']。长度
为1。但是,您有两个字母:ل
和ا
。我不知道阿拉伯语,所以不确定把它们看作是一个字符是否有意义,但是在Unicode中它们是不同的字符。把文本放在一个跨度内并检测跨度的宽度如何?试试看:可能的复制品,你是对的,这个概念在那个问题中,但它实际上并没有回答这个特定的问题-投票被删除。在ES6中,您可以使用[…str].length
获得字符超过16位的字符串的实际长度。例如,'\uD83D\uDE80'。长度
为2,但[…'\uD83D\uDE80']。长度
为1。但是,您有两个字母:ل
和ا
。我不懂阿拉伯语,所以不确定合作是否有意义