關(guān)于textarea的直觀換行的一些研究材料
更新時(shí)間:2006年10月07日 00:00:00 作者:
前兩天研究了一下textarea的直觀行的換行規(guī)律,挺復(fù)雜啊:
直觀行怎樣取不光要看cols大小,還要看網(wǎng)頁編碼方式。
cols="30"的textarea,實(shí)際上每行可以容納29個(gè)半角字符,多少個(gè)全角字符就不一定了,與網(wǎng)頁編碼方式有關(guān)。
在IE6.0實(shí)測(cè)的情況,直觀行的換行發(fā)生在紅字處(紅字折到下一行)。
dddddddddddd米ddddddddddddddddddddd //全角后面的連續(xù)半角內(nèi)容被當(dāng)成一個(gè)完整單詞處理,如果剩下的位置容不下單詞的長(zhǎng)度了,就要換行,此為特殊規(guī)律A
網(wǎng)頁按Unicode編碼(“運(yùn)行代碼”的彈出頁面即按此編碼,JS生成的頁面均按此編碼)時(shí)的一般規(guī)律是
(“占滿”是說后面無論再跟全角、半角字符,都得換行)
123456789012345678901234567890 //29半角占滿
一二三四五六七八九十一二三四五六七八九十 //17全角占滿
一二三四五六七八九十一二三四五六七0八九十
一二三四五六七八九十一二三四五六0七八九十
0一二三四五六七八九十一二三四五六1七八九十 //16全角,1半角占滿
0一二三四五六七八九十一二三四五六七八九十
0一二三四五六七八九十一二三四五1六七八九十 //15全角,2半角后不可容全角
01一二三四五六七八九十一二三四五六七八九十
01一二三四五六七八九十一二三四五2六七八九十 //15全角,2半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
012一二三四五六七八九十一二三四五六七八九十 //15全角,3半角占滿
012一二三四五六七八九十一二三四五3六七八九十
0123一二三四五六七八九十一二三四五六七八九十 //14全角,4半角后不可容全角
0123一二三四五六七八九十一二三四4五六七八九十 //14全角,4半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
01234一二三四五六七八九十一二三四五六七八九十 //14全角,5半角占滿
01234一二三四五六七八九十一二三四5五六七八九十
012345一二三四五六七八九十一二三四五六七八九十 //13全角,6半角后不可容全角
012345一二三四五六七八九十一二三6四五六七八九十 //13全角,6半角后可容1半角(多于1半角時(shí)按特殊規(guī)律A)
0123456一二三四五六七八九十一二三四五六七八九十 //13全角,7半角占滿
0123456一二三四五六七八九十一二三7四五六七八九十
01234567一二三四五六七八九十一二三四五六七八九十 //12全角,8半角占滿
01234567一二三四五六七八九十一二8三四五六七八九十
012345678一二三四五六七八九十一二三四五六七八九十 //11全角,9半角后不可容全角
012345678一二三四五六七八九十一9二三四五六七八九十 //11全角,9半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
0123456789一二三四五六七八九十一二三四五六七八九十 //11全角,10半角占滿
……
0一二三四五六七八九十一二三四五12六七八九十 //15全角,1半角后可再容2半角連續(xù)字符(多于2半角時(shí)按特殊規(guī)律A),此條可由15全角,3半角占滿得出
……
0一二三四五六七八九十一二三四1234五六七八九十 //14全角,1半角后可再容4半角連續(xù)字符(多于4半角時(shí)按特殊規(guī)律A),此條可由14全角,5半角占滿得出
……
01一二三四五六七八九十一二三四234五六七八九十 //14全角,2半角后可再容3半角連續(xù)字符(多于3半角時(shí)按特殊規(guī)律A),此條可由14全角,5半角占滿得出
……
換行位置不僅與換行位置之前的整行文字有關(guān),還與紅字有關(guān)(往往全角文字是因?yàn)闊o法在上行末尾擠下才被折到下一行的)。
總結(jié)一下就有:
CODE:[Copy to clipboard]x全角,y半角占滿 = x全角,y-1半角后不可容全角 = x全角,y-n半角后可再容n半角連續(xù)字符(多于n半角時(shí)按特殊規(guī)律A)。
所以做實(shí)驗(yàn)搞清楚所有“占滿”的情形就可以了。
現(xiàn)將cols=30,網(wǎng)頁按Unicode編碼時(shí)的“占滿”情況列出:
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半角
利用瀕于發(fā)生按特殊規(guī)律A換行的情形,很容易測(cè)出所有“占滿”的情形:
例如,一二三四五六七八九十012345678912一二三四五六七八九十 //10全角,12半角占滿
一二三四五六七八九十0123456789123一二三四五六七八九十 //紅字處按特殊規(guī)律A換行,藍(lán)字處按9全角,13半角占滿換行
cols=30,網(wǎng)頁按GB2312編碼時(shí),“占滿”規(guī)律不同了:
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半角
這樣的話,要根據(jù)網(wǎng)頁的編碼方式和cols,通過實(shí)驗(yàn)具體才能測(cè)出“占滿”規(guī)律。
從textarea內(nèi)容的開頭起計(jì)算全角和半角字符的數(shù)目,根據(jù)“占滿”規(guī)律及特殊規(guī)律A決定第一個(gè)直觀換行的位置,再從第二行(包括物理行和直觀行)起計(jì)算全角和半角字符的數(shù)目,根據(jù)“占滿”規(guī)律及特殊規(guī)律A決定第二個(gè)直觀換行的位置……如是繼續(xù)下去,直到textarea內(nèi)容的末尾。這樣就可以得到所有的換行位置了。
當(dāng)然實(shí)際應(yīng)用時(shí)沒必要也沒可能這樣做實(shí)驗(yàn)啦,比如說選中textarea的第X行到第Y行,還沒了解官方的辦法是怎樣的,我是這么辦的:
04 年初寫的東西,應(yīng)該是目前研究比較全面的了吧??
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
根據(jù)被某網(wǎng)站匿名轉(zhuǎn)載的頁面( http://dl.pconline.com.cn/html_2/4/545/id=38457&pn=0.html )上的網(wǎng)友留言,上面的《JS實(shí)現(xiàn)文本域的任意行選定》示例代碼有一處bug:即在滾動(dòng)條不在頂端的情況下運(yùn)行示例代碼會(huì)出錯(cuò)?,F(xiàn)已修正:只增加了一行代碼
CODE:
src.scrollTop=0 //確保開始數(shù)行數(shù)時(shí)滾動(dòng)條位于頂部
Bound0 子確工作室 生物信息學(xué)相關(guān)業(yè)務(wù)簡(jiǎn)介 [多步生物信息查詢的一步化] 將繁瑣的多步生物信息查詢合并為一步,減少在各個(gè)網(wǎng)頁間的手工跳轉(zhuǎn)。 只要能夠理清多步生物信息查詢的流程就可能做到一步化。 [批量數(shù)據(jù)轉(zhuǎn)錄、整合] 將大量零散的文檔收錄到數(shù)據(jù)庫中或整理、轉(zhuǎn)化為符合要求的格式。 例如:將數(shù)百個(gè)結(jié)構(gòu)復(fù)雜的word文檔內(nèi)容收錄到數(shù)據(jù)庫中。 [定制Bound0 Eureka預(yù)選器數(shù)據(jù)庫] 利用Bound0 Eureka預(yù)選器數(shù)據(jù)庫可以初步判斷樣品的成分,縮小進(jìn)一步實(shí)驗(yàn)的處理范圍,對(duì)接下來的實(shí)驗(yàn)環(huán)節(jié)做出調(diào)整,或預(yù)選出最佳的實(shí)驗(yàn)方案,從而縮短研究、開發(fā)的周期,節(jié)省人力物力。還可以初步驗(yàn)證某些假設(shè)推斷,并有助于提出新的假設(shè)推斷,構(gòu)建新的假說。同時(shí)讓交流和教學(xué)過程變得更簡(jiǎn)單、方便。 有關(guān)Bound0 Eureka預(yù)選器數(shù)據(jù)庫核心技術(shù)的專利申請(qǐng)已被受理,專利申請(qǐng)?zhí)枺?00610077985.3。 定制Bound0 Eureka預(yù)選器數(shù)據(jù)庫(Bound0 Eureka Preselector)的業(yè)務(wù)實(shí)質(zhì): 1、定制公共數(shù)據(jù)庫內(nèi)容的本地化整合。 2、定制數(shù)據(jù)庫查詢方式和查詢項(xiàng)目。 3、定制分析、統(tǒng)計(jì)功能。 4、定制數(shù)據(jù)共享功能。 5、定制教學(xué)展示功能。 6、定制其他輔助功能。 例如:Bound0酵母蛋白Eureka預(yù)選器數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容整合了SGD數(shù)據(jù)庫(Saccharomyces Genome Database,酵母基因組庫http://www.yeastgenome.org/)中的部分?jǐn)?shù)據(jù)。共包含6713個(gè)蛋白的信息。 Bound0酵母蛋白Eureka預(yù)選器數(shù)據(jù)庫具有以下基本功能: (1)Eureka Preselector(主功能): 根據(jù)條件給出符合條件的蛋白質(zhì)列表。根據(jù)蛋白質(zhì)的特征與目標(biāo)特征的接近程度對(duì)列表內(nèi)的蛋白質(zhì)進(jìn)行排名。以網(wǎng)頁形式輸出、保存 Eureka 結(jié)果。對(duì)保存的結(jié)果進(jìn)行對(duì)比分析。 (2)以樹狀結(jié)構(gòu)顯示(treeview)蛋白質(zhì)的各種生物學(xué)信息。 (3)以搜索引擎形式,對(duì)描述蛋白質(zhì)充當(dāng)?shù)募?xì)胞組分、參與的生物過程、分子功能等描述性特征的標(biāo)準(zhǔn)化術(shù)語(GO Term)提供注釋和指導(dǎo)。 (4)以搜索引擎形式,對(duì)蛋白質(zhì)的各種ID、名稱進(jìn)行通譯。 (5)在安裝了Bound0酵母蛋白Eureka預(yù)選器數(shù)據(jù)庫的計(jì)算機(jī)上,實(shí)現(xiàn)自定義的eureka:// 協(xié)議。可以在用戶自己的網(wǎng)頁中以超級(jí)鏈接(文字鏈接、圖片熱點(diǎn)鏈接等)的方式動(dòng)態(tài)地調(diào)用數(shù)據(jù)庫中的內(nèi)容進(jìn)行演示。 (6)自動(dòng)生成上述演示所需要的鏈接代碼。 (7)獨(dú)立發(fā)行(便于數(shù)據(jù)共享)的數(shù)據(jù)分析配件,可對(duì)以網(wǎng)頁形式保存的 Eureka 結(jié)果進(jìn)行處理。 更多詳情請(qǐng)置詢bound0@tom.com</textarea> 選中第行至第行
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
直觀行怎樣取不光要看cols大小,還要看網(wǎng)頁編碼方式。
cols="30"的textarea,實(shí)際上每行可以容納29個(gè)半角字符,多少個(gè)全角字符就不一定了,與網(wǎng)頁編碼方式有關(guān)。
在IE6.0實(shí)測(cè)的情況,直觀行的換行發(fā)生在紅字處(紅字折到下一行)。
dddddddddddd米ddddddddddddddddddddd //全角后面的連續(xù)半角內(nèi)容被當(dāng)成一個(gè)完整單詞處理,如果剩下的位置容不下單詞的長(zhǎng)度了,就要換行,此為特殊規(guī)律A
網(wǎng)頁按Unicode編碼(“運(yùn)行代碼”的彈出頁面即按此編碼,JS生成的頁面均按此編碼)時(shí)的一般規(guī)律是
(“占滿”是說后面無論再跟全角、半角字符,都得換行)
123456789012345678901234567890 //29半角占滿
一二三四五六七八九十一二三四五六七八九十 //17全角占滿
一二三四五六七八九十一二三四五六七0八九十
一二三四五六七八九十一二三四五六0七八九十
0一二三四五六七八九十一二三四五六1七八九十 //16全角,1半角占滿
0一二三四五六七八九十一二三四五六七八九十
0一二三四五六七八九十一二三四五1六七八九十 //15全角,2半角后不可容全角
01一二三四五六七八九十一二三四五六七八九十
01一二三四五六七八九十一二三四五2六七八九十 //15全角,2半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
012一二三四五六七八九十一二三四五六七八九十 //15全角,3半角占滿
012一二三四五六七八九十一二三四五3六七八九十
0123一二三四五六七八九十一二三四五六七八九十 //14全角,4半角后不可容全角
0123一二三四五六七八九十一二三四4五六七八九十 //14全角,4半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
01234一二三四五六七八九十一二三四五六七八九十 //14全角,5半角占滿
01234一二三四五六七八九十一二三四5五六七八九十
012345一二三四五六七八九十一二三四五六七八九十 //13全角,6半角后不可容全角
012345一二三四五六七八九十一二三6四五六七八九十 //13全角,6半角后可容1半角(多于1半角時(shí)按特殊規(guī)律A)
0123456一二三四五六七八九十一二三四五六七八九十 //13全角,7半角占滿
0123456一二三四五六七八九十一二三7四五六七八九十
01234567一二三四五六七八九十一二三四五六七八九十 //12全角,8半角占滿
01234567一二三四五六七八九十一二8三四五六七八九十
012345678一二三四五六七八九十一二三四五六七八九十 //11全角,9半角后不可容全角
012345678一二三四五六七八九十一9二三四五六七八九十 //11全角,9半角后可再容1半角(多于1半角時(shí)按特殊規(guī)律A)
0123456789一二三四五六七八九十一二三四五六七八九十 //11全角,10半角占滿
……
0一二三四五六七八九十一二三四五12六七八九十 //15全角,1半角后可再容2半角連續(xù)字符(多于2半角時(shí)按特殊規(guī)律A),此條可由15全角,3半角占滿得出
……
0一二三四五六七八九十一二三四1234五六七八九十 //14全角,1半角后可再容4半角連續(xù)字符(多于4半角時(shí)按特殊規(guī)律A),此條可由14全角,5半角占滿得出
……
01一二三四五六七八九十一二三四234五六七八九十 //14全角,2半角后可再容3半角連續(xù)字符(多于3半角時(shí)按特殊規(guī)律A),此條可由14全角,5半角占滿得出
……
換行位置不僅與換行位置之前的整行文字有關(guān),還與紅字有關(guān)(往往全角文字是因?yàn)闊o法在上行末尾擠下才被折到下一行的)。
總結(jié)一下就有:
CODE:[Copy to clipboard]x全角,y半角占滿 = x全角,y-1半角后不可容全角 = x全角,y-n半角后可再容n半角連續(xù)字符(多于n半角時(shí)按特殊規(guī)律A)。
所以做實(shí)驗(yàn)搞清楚所有“占滿”的情形就可以了。
現(xiàn)將cols=30,網(wǎng)頁按Unicode編碼時(shí)的“占滿”情況列出:
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半角
利用瀕于發(fā)生按特殊規(guī)律A換行的情形,很容易測(cè)出所有“占滿”的情形:
例如,一二三四五六七八九十012345678912一二三四五六七八九十 //10全角,12半角占滿
一二三四五六七八九十0123456789123一二三四五六七八九十 //紅字處按特殊規(guī)律A換行,藍(lán)字處按9全角,13半角占滿換行
cols=30,網(wǎng)頁按GB2312編碼時(shí),“占滿”規(guī)律不同了:
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半角
這樣的話,要根據(jù)網(wǎng)頁的編碼方式和cols,通過實(shí)驗(yàn)具體才能測(cè)出“占滿”規(guī)律。
從textarea內(nèi)容的開頭起計(jì)算全角和半角字符的數(shù)目,根據(jù)“占滿”規(guī)律及特殊規(guī)律A決定第一個(gè)直觀換行的位置,再從第二行(包括物理行和直觀行)起計(jì)算全角和半角字符的數(shù)目,根據(jù)“占滿”規(guī)律及特殊規(guī)律A決定第二個(gè)直觀換行的位置……如是繼續(xù)下去,直到textarea內(nèi)容的末尾。這樣就可以得到所有的換行位置了。
當(dāng)然實(shí)際應(yīng)用時(shí)沒必要也沒可能這樣做實(shí)驗(yàn)啦,比如說選中textarea的第X行到第Y行,還沒了解官方的辦法是怎樣的,我是這么辦的:
04 年初寫的東西,應(yīng)該是目前研究比較全面的了吧??
| | 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需再刷新一下頁面才能執(zhí)行]
根據(jù)被某網(wǎng)站匿名轉(zhuǎn)載的頁面( http://dl.pconline.com.cn/html_2/4/545/id=38457&pn=0.html )上的網(wǎng)友留言,上面的《JS實(shí)現(xiàn)文本域的任意行選定》示例代碼有一處bug:即在滾動(dòng)條不在頂端的情況下運(yùn)行示例代碼會(huì)出錯(cuò)?,F(xiàn)已修正:只增加了一行代碼
CODE:
src.scrollTop=0 //確保開始數(shù)行數(shù)時(shí)滾動(dòng)條位于頂部
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
您可能感興趣的文章:
- 讓textarea自動(dòng)調(diào)整大小的js代碼
- javascript textarea光標(biāo)定位方法(兼容IE和FF)
- 動(dòng)態(tài)調(diào)整textarea中字體的大小代碼
- 新浪微博字?jǐn)?shù)統(tǒng)計(jì) textarea字?jǐn)?shù)統(tǒng)計(jì)實(shí)現(xiàn)代碼
- Textarea與懶惰渲染實(shí)現(xiàn)代碼
- 非主流的textarea自增長(zhǎng)實(shí)現(xiàn)js代碼
- 在chrome瀏覽器中,防止input[text]和textarea在聚焦時(shí)出現(xiàn)黃色邊框的解決方法
- js操作textarea方法集合封裝(兼容IE,firefox)
- JavaScript 獲取/設(shè)置光標(biāo)位置,兼容Input&&TextArea
- js TextArea的選中區(qū)域處理
- js封裝的textarea操作方法集合(兼容很好)
- javascript實(shí)現(xiàn)的textarea運(yùn)行框效果代碼 不用指定id批量指定
- JavaScript 監(jiān)聽textarea中按鍵事件
- javascript之textarea打字機(jī)效果提示代碼推薦
- 用javascript獲取textarea中的光標(biāo)位置
- textarea支持圖形編輯的實(shí)現(xiàn)方法
- 在textarea文本域中顯示HTML代碼的方法
- JS TextArea字符串長(zhǎng)度限制代碼集合
相關(guān)文章
javascript + jquery實(shí)現(xiàn)定時(shí)修改文章標(biāo)題
用javascript+jquery寫的一個(gè)定時(shí)器,定時(shí)修改文章標(biāo)題,需要的朋友可以參考下2014-03-03微信小程序云開發(fā)實(shí)現(xiàn)分頁刷新獲取數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了微信小程序云開發(fā)實(shí)現(xiàn)分頁刷新獲取數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08JS動(dòng)態(tài)插入并立即執(zhí)行回調(diào)函數(shù)的方法
這篇文章主要介紹了JS動(dòng)態(tài)插入并立即執(zhí)行回調(diào)函數(shù)的方法,實(shí)例分析了動(dòng)態(tài)插入js文件及執(zhí)行回調(diào)函數(shù)的相關(guān)技巧,需要的朋友可以參考下2016-04-04JavaScript switch語句使用方法簡(jiǎn)介
這篇文章主要介紹了JavaScript switch語句使用方法簡(jiǎn)介,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12微信公眾平臺(tái)開發(fā)教程(六)獲取個(gè)性二維碼的實(shí)例
二維碼的用處有很多,本篇文章主要介紹了微信公眾平臺(tái)開發(fā)教程(六)獲取個(gè)性二維碼的實(shí)例,有興趣的可以了解一下。2016-12-12代碼塊高亮可復(fù)制顯示js插件highlight.js+clipboard.js整合
最近有個(gè)需求是將jsp頁面上的某一段代碼塊格式化成類似CSDN的代碼塊的樣式,而且很多平臺(tái)都使用了這樣的功能,下面就為大家簡(jiǎn)單分享一下2021-02-02