Javascript 如何知道它在文本区域中的哪个字符变为另一行?

Javascript 如何知道它在文本区域中的哪个字符变为另一行?,javascript,html,Javascript,Html,文本区: 第一行末尾没有回车符,是否有任何解决方案可以知道它在哪一个字符处转到下一行? 以这个为例,它会转到字符“后面的下一行”哪" 或在第13个字符之后。(可以输入SBC大小写或DBC大小写字符。)好吧,当你创建一个textarea时,你应该提供列的数量,因此如果因为它到达了行的末尾而进行换行,那么可以公平地假设字符的数量是你指定的列的数量。或者我遗漏了什么吗?好吧,当你创建一个textarea时,你应该提供列的数量,因此如果它是因为到达了行的末尾而换行的,那么可以公平地假设字符的数量就是您

文本区:

第一行末尾没有回车符,是否有任何解决方案可以知道它在哪一个字符处转到下一行?
以这个为例,它会转到字符“后面的下一行”哪" 或在第13个字符之后。(可以输入SBC大小写或DBC大小写字符。)

好吧,当你创建一个textarea时,你应该提供列的数量,因此如果因为它到达了行的末尾而进行换行,那么可以公平地假设字符的数量是你指定的列的数量。或者我遗漏了什么吗?

好吧,当你创建一个textarea时,你应该提供列的数量,因此如果它是因为到达了行的末尾而换行的,那么可以公平地假设字符的数量就是您指定的列的数量。或者我遗漏了什么?

cols属性确定
textarea
元素的宽度,但通常由样式表和
width
属性。即使没有CSS设置的宽度,
cols
也不是大多数浏览器严格执行的(至少在Chrome中,只要垂直滚动条存在,它是准确的),此外,行通常在单词边界而不是字符处进行包装

这是一个难看的解决方案,但它应该可以工作。其思想是将textarea元素的高度设置为0,然后从其值字符串的末尾一次删除一个单词,并检查
scrollHeight
属性的更改

//make scrollbars take up space even when they are not needed
//necessary to keep space available for text constant
txtarea.style.overflow = 'scroll !important'; 
txtarea.style.height = '0px !important';
var tmpvalue = txtarea.value;
var currentscroll = txtarea.scrollHeight;
var wrapat = [];


var parts;

//Regex breaks textarea value into ['every word but the last', 'one']
while (parts = txtarea.value.match(/([^\0]*)\s\w*/m)) {

    txtarea.value = parts[1];

    //scrollHeight has changed, add wrap index to array
    if (txtarea.scrollHeight < currentscroll) {

      wrapat.push(txtarea.value.length-1);
      currentscroll = txtarea.scrollHeight;

    }
}

//sort wrap array for niceness
wrapat = wrapat.sort(function(a,b) { return a-b; });

//restore everything to normal
txtarea.value = tmpvalue;
txtarea.style.height = '';`
//使滚动条即使在不需要时也占用空间
//保持文本可用空间不变所必需的
txtarea.style.overflow='scroll!important';
txtarea.style.height='0px!重要';
var tmpvalue=txtarea.value;
var currentscroll=txtarea.scrollHeight;
var-wrapat=[];
var部件;
//正则表达式将textarea值分解为['除最后一个单词外的每个单词','一个']
while(parts=txtarea.value.match(/([^\0]*)\s\w*/m)){
txtarea.value=零件[1];
//scrollHeight已更改,请将换行索引添加到数组
如果(txtarea.scrollHeight
在这里尝试代码

可能有一些错误,例如,这段代码不处理长的“单词”,比如URL,它们可能会一分为二。此外,还需要一些额外的计算来确定一行是自动换行还是因为换行(某种程度上是在链接代码中处理的),并且它可能会遇到由多个空格/换行符分隔的单词的问题。但这是最基本的想法


如果有更简单的解决方案,我不知道。

属性
cols
决定
textarea
元素的宽度,但通常由样式表和
width
属性覆盖。即使没有CSS设置的宽度,
cols
也不会被大多数浏览器严格执行(至少在Chrome中,只要垂直滚动条存在,它是准确的),此外,线条通常在单词边界而不是字符处缠绕

这是一个难看的解决方案,但它应该可以工作。其思想是将textarea元素的高度设置为0,然后从其值字符串的末尾一次删除一个单词,并检查
scrollHeight
属性的更改

//make scrollbars take up space even when they are not needed
//necessary to keep space available for text constant
txtarea.style.overflow = 'scroll !important'; 
txtarea.style.height = '0px !important';
var tmpvalue = txtarea.value;
var currentscroll = txtarea.scrollHeight;
var wrapat = [];


var parts;

//Regex breaks textarea value into ['every word but the last', 'one']
while (parts = txtarea.value.match(/([^\0]*)\s\w*/m)) {

    txtarea.value = parts[1];

    //scrollHeight has changed, add wrap index to array
    if (txtarea.scrollHeight < currentscroll) {

      wrapat.push(txtarea.value.length-1);
      currentscroll = txtarea.scrollHeight;

    }
}

//sort wrap array for niceness
wrapat = wrapat.sort(function(a,b) { return a-b; });

//restore everything to normal
txtarea.value = tmpvalue;
txtarea.style.height = '';`
//使滚动条即使在不需要时也占用空间
//保持文本可用空间不变所必需的
txtarea.style.overflow='scroll!important';
txtarea.style.height='0px!重要';
var tmpvalue=txtarea.value;
var currentscroll=txtarea.scrollHeight;
var-wrapat=[];
var部件;
//正则表达式将textarea值分解为['除最后一个单词外的每个单词','一个']
while(parts=txtarea.value.match(/([^\0]*)\s\w*/m)){
txtarea.value=零件[1];
//scrollHeight已更改,请将换行索引添加到数组
如果(txtarea.scrollHeight
在这里尝试代码

可能有一些错误,例如,这段代码不处理长的“单词”,比如URL,它们可能会一分为二。此外,还需要一些额外的计算来确定一行是自动换行还是因为换行(某种程度上是在链接代码中处理的),并且它可能会遇到由多个空格/换行符分隔的单词的问题。但这是最基本的想法


如果有更简单的解决方案,我不知道。

谢谢你的回答。但是cols属性对于SBC大小写字符没有多大用处。例如:我写道:只能输入5个SBS大小写字符或9个DBC大小写字符。如果我使用属性[wrap=“physical”],它将在第一行末尾添加ENTER,但是我无法识别用户输入的是哪个ENTER,以及下次显示textarea内容时自动添加的是哪个ENTER。感谢您的回答。但是cols属性对于SBC大小写字符没有多大用处。例如:我写道:只能输入5个SBS大小写字符或者可以输入9个DBC大小写字符。如果我使用属性[wrap=“physical”],它会在第一行末尾添加ENTER,但是我无法识别哪个ENTER是用户输入的,哪个是它下次显示textarea内容时自动添加的。耶,天哪……它看起来很不专业,放
“b有这么难吗“
之前?是啊,天啊..看起来很不专业,在前面放一个
“b”
有那么难吗?