>  기사  >  웹 프론트엔드  >  textarea_javascript 기술의 직관적인 줄 바꿈에 대한 일부 연구 자료

textarea_javascript 기술의 직관적인 줄 바꿈에 대한 일부 연구 자료

WBOY
WBOY원래의
2016-05-16 19:25:421289검색

이틀 전에 텍스트 영역의 직관적인 행 줄 바꿈 규칙을 연구했습니다.

직관적인 행을 선택하는 방법은 열 크기뿐 아니라 웹페이지 인코딩 방법에 따라 달라집니다. ​​
cols="30"의 텍스트 영역은 실제로 한 줄에 29개의 반각 문자를 수용할 수 있습니다. 전각 문자 수는 반드시 결정되는 것은 아니며 웹 페이지의 인코딩 방법과 관련이 있습니다.
IE6.0의 실제 측정에서는 빨간색 텍스트(빨간색 텍스트가 다음 줄로 접혀 있음)에서 시각적 줄바꿈이 발생합니다.

dddddddddddddddddddddddd //전각 뒤에 이어지는 연속된 반각 내용은 단어의 길이를 수용할 수 없을 경우 나머지 위치를 감싸야 한다는 특수 규칙입니다.

웹 페이지를 유니코드로 인코딩할 때("Run Code"의 팝업 페이지는 이렇게 인코딩되고, JS에서 생성된 페이지는 이렇게 인코딩됩니다) 일반적인 규칙은

("full"은 뒤에 오는 내용에 관계없이 전체 너비, 반 너비 문자가 모두 래핑되어야 함을 의미합니다.)

123456789012345678901234567890 //29 반 너비가 가득 참
12345678911234567890 / /17 전각 가득
일 둘 셋 넷 다섯 여섯 일곱 여덟 구십일 이삼 넷 다섯 여섯 일곱 여덟 구십
일 둘 셋 넷 다섯 여섯 일곱 여덟 구십일 둘 셋 넷 다섯 여섯 일곱 여덟 구십
🎜 >0 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 하나 둘 셋 넷 다섯 여섯 하나 일곱 여덟 구십 //16 전각, 1 반각 사용
0 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 열한 둘 셋 4 5 6 7 8 90
0 1 2 3 4 5 6 7 8 91 2 3 4 5 1 6 7 8 90 //15 전자, 2 반각 이후에는 전자가 허용되지 않습니다
01 하나 둘 셋 넷 다섯 여섯 일곱 여덟 구십일 이삼 넷 다섯 여섯 일곱 여덟 구십
01 하나 둘 셋 넷 다섯 여섯 일곱 여덟 구십일 둘 셋 넷 다섯 여섯 여섯 일곱 여덟 구십 // 15 전각, 2 반각 사용 가능 또 다른 반각 허용(반각이 1개 이상인 경우 특수 규칙 A 준수)
012 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱, 여덟, 구십, 하나, 2, 3, 4, 5, 6, 7, 8, 90 // 전각 15개, 반각 3개가 사용됨
012 하나 둘 셋 넷 다섯 여섯 일곱 여덟 구십일 둘 셋 넷 다섯 셋 여섯 일곱 여덟 구십
0123 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아흔한 열한 둘 셋 넷 다섯 여섯 일곱 여덟 구십 //14 전각, 4 이후에는 반각, 전각 불가
0123 하나, 둘, 3, 4, 5-6, 7-8, 91, 2, 3, 4, 5-6, 7-8-90 // 14 전각, 4 반각 이후 1 반각 가능 1개 이상 수용(반각 A의 특별 규정에 따름)
01234 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱, 여덟, 아흔, 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱 , 8, 90 // 14 전각, 5 반각 점유
01234, 1-2-3-4-5-6 7 8 91 2 3 4 5 6 7 8 90
012345 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 90 //13 전각, 전각은 6 반자 이후에는 허용되지 않음
012345 123456789112364567890 //13 전각, 6 반자 이후 -폭, 반폭 1개 수용 가능(반폭 1개 초과 시 특별 규칙 A 적용)
0123456 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 하나 둘 셋 넷 다섯 여섯 일곱 여덟 구십 //13 전각, 7 반각 점유
0123456 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 열한 둘 셋 일곱 넷 다섯 여섯 일곱 여덟 구십
01234567 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아흔 하나 둘 셋 넷 다섯 6 7 8 90 // 12 전각, 8 반폭 사용
01234567 1 2 3 4 5 67 8912834567890
0123456781234567891234567890//11 전각, 9 반각 뒤에는 전각이 올 수 없습니다. width
012345678 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 하나 아홉 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 열 //11 전각, 반각 9개 이후에는 반각 1개 수용 가능(1개 이상인 경우) 반각, 특수 규칙 A 적용)
0123456789 일 둘 셋 넷 다섯 여섯 일곱 여덟 아흔일 둘 삼 넷 다섯 여섯 일곱 여덟 구십 //11 전각, 10 반각 점유

......

0 일 이 삼 사 56789123451267890 //15 전각, 반각 1개 이후 연속된 반각 2개 문자 수용 가능(반각 2개 이상일 경우 특칙 A 적용) -너비 사용) 이 항목은 전각 15개, 반각 3개를 채워서

...

0개, 둘, 셋, 넷, five, six, Seven,ight, ninety, one, two, three, four, 1234, five, six, July,ight, ninety // 전각 14개, 반각 1개 연속된 반각 문자 4개를 수용할 수 있습니다( 반각이 4개보다 많으면 특수 규칙 A를 따릅니다. 14개의 반각과 5개의 반각에서 얻을 수 있습니다.

...

01 하나 둘 셋 넷 567891234234567890 //14 전각, 반각 2개 이후, 반각 연속 문자 3개 수용 가능(반각 3개 이상일 경우 특칙 A 적용), 본 항목은 전각 14개, 반각 14개로 구성 가능, 5 반각을 채워

...
줄 바꿈 위치는 줄 바꿈 위치 앞의 텍스트 줄 전체와 관련될 뿐만 아니라 빨간색 텍스트(종종 전체 너비 텍스트는 다음 줄의 위쪽 줄 끝 부분에서 압착될 수 없기 때문에 접혀집니다.

요약:


CODE:[클립보드에 복사]x 전폭, y 반폭 차지 = x 전폭, y-1 반폭은 전폭 이후에 수용할 수 없음 = x 전각, y-n 반각 문자 이후 n 개의 반각 연속 문자를 수용할 수 있습니다(반각 문자가 n 개보다 많은 경우 특수 규칙 A 적용).
그러니 실험을 통해 '전체' 상황을 모두 알아보세요.

이제 cols=30 및 웹페이지가 유니코드로 인코딩된 경우 "전체" 상황을 나열하세요.

17 전폭
16 전폭, 1 반폭
전각 15개, 반각 3개
전각 14개, 반각 5개
전각 13개, 반각 7개
전각 12개, 반각 8개
전각 11개 --폭, 10 반폭
10 전폭, 12 반폭
9 전폭, 13 반폭
8 전폭, 15 반폭
7 전폭 , 반각 17
전각 6개, 반각 19
전각 5개, 반각 21
전각 4개, 반각 22
전각 3개, 반각 24 반각
전각 2개, 반각 26
전각 1개, 반각 28
반각 29개

줄바꿈이 있는 상황을 이용하여 특수 규칙 A에 따라 발생 직전의 경우 모든 "가득한" 상황을 쉽게 감지할 수 있습니다.
예를 들어 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 열 012345678912 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 십 // 10 전각, 12 반각 점유
하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 열 0123456789123 일 둘 셋 넷 다섯 Sixty-seven, Augusty-ninety // 빨간색 단어는 특수 규칙에 따라 줄 바꿈됩니다. A, 파란색 단어는 전폭 9이고, 반폭 13은

cols=30 줄을 묶는 데 사용됩니다. 웹 페이지가 GB2312에 따라 인코딩되면 "전폭" 규칙은 다음과 같습니다. :

전각 14개, 반각 1개
전각 13개, 반각 3개
전각 12개, 반각 5개
전각 11개, 반각 7개
전각 10개, 반각 9개
전각 9개, 반각 11
전각 8개, 반각 13
전각 7개, 반각 15개 -너비
6 전각, 17 반자
5 전폭, 19 반자
4 전폭, 21 반폭
3 전폭, 23 반폭
전각 2개, 반각 25
전각 1개, 반각 27
반각 29

이 경우 "전체" 규칙만 측정할 수 있습니다. 웹페이지의 인코딩 방식과 컬럼을 기반으로 한 실험을 통해.

텍스트 영역 콘텐츠의 시작 부분부터 전자 및 반자 문자 수를 세고 "전체" 규칙과 특수 규칙 A에 따라 첫 번째 시각적 줄 바꿈 위치를 결정한 다음 시작합니다. 두 번째 줄(물리적 줄과 시각적 줄 포함)부터 전각 및 반각 문자의 수를 세고, "전체" 규칙 및 특수 규칙 A에 따라 두 번째 직관적인 줄 바꿈 위치를 결정합니다. ..텍스트 영역 콘텐츠가 끝날 때까지 이런 방식으로 계속합니다. 이러한 방식으로 모든 줄바꿈 위치를 얻을 수 있습니다.

물론 실제 애플리케이션에서는 이 실험을 수행할 필요도 없고 가능하지도 않습니다. 예를 들어 텍스트 영역의 X에서 Y 행을 선택하는 경우는 아직 공식적인 방법을 배우지 않았습니다.


[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

2004년 초에 제가 쓴 글은 현재 가장 포괄적인 연구여야겠죠? ?
  Current Position : Physical Row: Physical Column: Visible Row: Visible Column: Error Message: 현재 직위: 실제 행: 실제 열: 표시 행: 표시 열: 오류 메시지:
CreateRange CreateTextRange
CreateRange.getClientRects() CreateTextRange.getClientRects()
CreateRange.getBoundingClientRect() CreateTextRange.getBoundingClientRect()

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

根据被某网站匿名转载的页面( http://dl.pconline.com.cn/html_2/4/545/id=38457&pn=0.html )上的网友留言,上面的《JS实现文本域的任意行选定》示例代码有一处bug:即在滚动条不在顶端的情况下运行示例代码会出错。现已修正:只增加了一行代码


CODE:
src.scrollTop=0 //确保开始数行数时滚动条位于顶部

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.