Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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_Textarea_Selection - Fatal编程技术网

Javascript 在文本区域中获取换行符

Javascript 在文本区域中获取换行符,javascript,textarea,selection,Javascript,Textarea,Selection,我想为文本区中的电子邮件创建一个提前输入机制 如果我在文本区域中键入,控件将自动对文本进行换行,因此我要知道光标当前的位置(即其x、y位置)取决于这些换行的位置。(选择位置正好是光标距起始位置的字符数。) 我需要x和y的任意位置,这样我就可以在光标下面放置一个可能完成的列表 是否有一种方法可以从控件中提取此换行信息,或者我必须修改它并执行“滚动您自己的”文本包装算法(这是一种很棘手的方法,因为在javascript中不容易测量文本宽度。) 如果有任何帮助,我们将不胜感激。使用jQuery将所有内

我想为文本区中的电子邮件创建一个提前输入机制

如果我在文本区域中键入,控件将自动对文本进行换行,因此我要知道光标当前的位置(即其x、y位置)取决于这些换行的位置。(选择位置正好是光标距起始位置的字符数。)

我需要x和y的任意位置,这样我就可以在光标下面放置一个可能完成的列表

是否有一种方法可以从控件中提取此换行信息,或者我必须修改它并执行“滚动您自己的”文本包装算法(这是一种很棘手的方法,因为在javascript中不容易测量文本宽度。)


如果有任何帮助,我们将不胜感激。

使用jQuery将所有内容整合在一起。如果需要JavaScript块,请告诉我

$(函数(){
var textProps=[0,0];
$(“textarea.allow overflow”).keyup(函数(e){
var self=$(这是);
var text_width=$(“.hidden”).text(self.val()).css({
“字体重量”:self.css(“字体重量”),
“字体大小”:self.css(“字体大小”),
“字体系列”:self.css(“字体系列”),
“空白”:“nowrap”,
'位置':'绝对',
“显示”:“块”,
“宽度”:“自动”
}).hide().width();
textProps[0]=$(“.hidden”).width();
textProps[1]=$(“.hidden”).height();
var overflows=text_width>self.width();
var线=1;
如果(溢出){
lines=Math.floor(self.prop(“scrollHeight”)/$(“.hidden”).height());
textProps[0]=textProps[0]-(self.width()*(lines-1));
textProps[1]=$(“.hidden”).height()*行;
}
$(“.report”).html(“X(左):“+textProps[0]+”px,Y(上):“+textProps[1]+”px,换行:“+overflows.toString()+”,行:“+Lines”);
});
});
.widget标签{
显示:块;
}
.widget。允许溢出,
.报告{
宽度:240px;
字体系列:Arial,“Helvetica Neue”,Helvetica,无衬线;
字体大小:13px;
字体大小:400;
}
.报告{
边框:1px虚线#ccc;
字体大小:9px;
}

输入我

实现这一点的方法不多。将文本复制到隐藏或关闭的视口
div
,并获取其宽度。如果
div
的宽度大于文本字段的宽度,则您知道文本将换行。您的Y将增加
行高度
。每行重复一次,然后你也可以检测最后X的线条宽度。虽然不太容易,但可能会奏效。可能的建议:另外:这有点帮助,谢谢你把它放在一起,但是,问题是我需要知道换行符在哪里,而不仅仅是行的总数。光标可能在文本中的任何位置,最终它就是我需要的光标位置。@FraserOrr从技术上讲,没有换行符。换行符或回车和换行符(
\r\n
)是行结束(EOL)的唯一指示器。您试图识别文本被包装到下一行的溢出点。这里没有分隔符,你只能通过测量来完成。好的,谢谢大家,仅供参考,我把字体改成了等距字体,这样可以更快地完成测量运算。用DOM进行测量太慢了。