直觀行怎樣取不光要看cols大小,還要看網頁編碼方式。
cols="30"的textarea,實際上每行可以容納29個半角字符,多少個全角字符就不一定了,與網頁編碼方式有關。
在IE6.0實測的情況,直觀行的換行發生在紅字處(紅字折到下一行)。
dddddddddddd米ddddddddddddddddddddd //全角后面的連續半角內容被當成一個完整單詞處理,如果剩下的位置容不下單詞的長度了,就要換行,此為特殊規律A
網頁按Unicode編碼(“運行代碼”的彈出頁面即按此編碼,JS生成的頁面均按此編碼)時的一般規律是
(“占滿”是說后面無論再跟全角、半角字符,都得換行)
123456789012345678901234567890 //29半角占滿
一二三四五六七八九十一二三四五六七八九十 //17全角占滿
一二三四五六七八九十一二三四五六七0八九十
一二三四五六七八九十一二三四五六0七八九十
0一二三四五六七八九十一二三四五六1七八九十 //16全角,1半角占滿
0一二三四五六七八九十一二三四五六七八九十
0一二三四五六七八九十一二三四五1六七八九十 //15全角,2半角后不可容全角
01一二三四五六七八九十一二三四五六七八九十
01一二三四五六七八九十一二三四五2六七八九十 //15全角,2半角后可再容1半角(多于1半角時按特殊規律A)
012一二三四五六七八九十一二三四五六七八九十 //15全角,3半角占滿
012一二三四五六七八九十一二三四五3六七八九十
0123一二三四五六七八九十一二三四五六七八九十 //14全角,4半角后不可容全角
0123一二三四五六七八九十一二三四4五六七八九十 //14全角,4半角后可再容1半角(多于1半角時按特殊規律A)
01234一二三四五六七八九十一二三四五六七八九十 //14全角,5半角占滿
01234一二三四五六七八九十一二三四5五六七八九十
012345一二三四五六七八九十一二三四五六七八九十 //13全角,6半角后不可容全角
012345一二三四五六七八九十一二三6四五六七八九十 //13全角,6半角后可容1半角(多于1半角時按特殊規律A)
0123456一二三四五六七八九十一二三四五六七八九十 //13全角,7半角占滿
0123456一二三四五六七八九十一二三7四五六七八九十
01234567一二三四五六七八九十一二三四五六七八九十 //12全角,8半角占滿
01234567一二三四五六七八九十一二8三四五六七八九十
012345678一二三四五六七八九十一二三四五六七八九十 //11全角,9半角后不可容全角
012345678一二三四五六七八九十一9二三四五六七八九十 //11全角,9半角后可再容1半角(多于1半角時按特殊規律A)
0123456789一二三四五六七八九十一二三四五六七八九十 //11全角,10半角占滿
……
0一二三四五六七八九十一二三四五12六七八九十 //15全角,1半角后可再容2半角連續字符(多于2半角時按特殊規律A),此條可由15全角,3半角占滿得出
……
0一二三四五六七八九十一二三四1234五六七八九十 //14全角,1半角后可再容4半角連續字符(多于4半角時按特殊規律A),此條可由14全角,5半角占滿得出
……
01一二三四五六七八九十一二三四234五六七八九十 //14全角,2半角后可再容3半角連續字符(多于3半角時按特殊規律A),此條可由14全角,5半角占滿得出
……
換行位置不僅與換行位置之前的整行文字有關,還與紅字有關(往往全角文字是因為無法在上行末尾擠下才被折到下一行的)。
總結一下就有:
CODE:[Copy to clipboard]x全角,y半角占滿 = x全角,y-1半角后不可容全角 = x全角,y-n半角后可再容n半角連續字符(多于n半角時按特殊規律A)。
所以做實驗搞清楚所有“占滿”的情形就可以了。
現將cols=30,網頁按Unicode編碼時的“占滿”情況列出:
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一二三四五六七八九十 //紅字處按特殊規律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半角
這樣的話,要根據網頁的編碼方式和cols,通過實驗具體才能測出“占滿”規律。
從textarea內容的開頭起計算全角和半角字符的數目,根據“占滿”規律及特殊規律A決定第一個直觀換行的位置,再從第二行(包括物理行和直觀行)起計算全角和半角字符的數目,根據“占滿”規律及特殊規律A決定第二個直觀換行的位置……如是繼續下去,直到textarea內容的末尾。這樣就可以得到所有的換行位置了。
當然實際應用時沒必要也沒可能這樣做實驗啦,比如說選中textarea的第X行到第Y行,還沒了解官方的辦法是怎樣的,我是這么辦的: