Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找出;“图形长度”;以单空格字母表示的字符串_Javascript_Unicode - Fatal编程技术网

Javascript 找出;“图形长度”;以单空格字母表示的字符串

Javascript 找出;“图形长度”;以单空格字母表示的字符串,javascript,unicode,Javascript,Unicode,我有一个字符串,可以包含unicode字母。我想知道,当它以单空间字体写在屏幕上时,它的“宽度”(字母,而不是像素)有多大 它可能不像看上去那么琐碎。考虑这个代码: var la = "لا" console.log(la.length); // prints 2 console.log(la.split); // [ 'ل', 'ا' ] 在几乎所有单空格字体中,لا的宽度为1个字母,但实际上是2个字母-ل和ا(忽略书写方向问题,这是另一回事:) 有没有可能在Javascript中找到“

我有一个字符串,可以包含unicode字母。我想知道,当它以单空间字体写在屏幕上时,它的“宽度”(字母,而不是像素)有多大

它可能不像看上去那么琐碎。考虑这个代码:

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。但是,您有两个字母:
ل
ا
。我不懂阿拉伯语,所以不确定合作是否有意义