Richtext編輯模式(上)


阿瑟 發表



利用傳統的textarea輸入方塊來取得使用者輸入還必須經過後台script做HTML的轉換才能夠正常顯示, 這次介紹的Richtext輸入方塊就是一個很方便的另一個選擇.

相信大家都對 <textarea></textarea> 產生的多行文字輸入方塊都不陌生, 他們看起來十分的陽春:


從這裡輸入的資料, 到了後台還必須將分行符號轉換成為 <br>才能夠達到分行的效果, 這樣做除了不方便以外, 使用者能的輸入選項也十分的侷限: 只有純文字的內容而已. 如欲交換各種不同類型的資料 (如圖文並茂的教學文章), 這種純文字的輸入方塊就不能滿足需求.

那要如何增加輸入的選擇呢?
有些人選擇開放檔案上傳, 有些人則開放輸入HTML標籤...小弟這次要介紹一種有效且容易上手的輸入方塊: Richtext 輸入方塊

Richtext輸入方塊
顧名思義, Richtext輸入方塊的輸入是Rich Text Format, 有點類似Microsoft Word的輸入格式, 可以有不同的字體, 顏色, 甚至可以加入圖片.
小弟會將製作一個Richtext輸入方塊的方法分成多個步驟然後逐一講解



STEP 1: 認識iFrame
iframe (內嵌框架) 已經是一個蠻常用的功能了. 他能夠在一份網頁中以內嵌的方式顯示另一份網頁.

這是一個讀取了酷必網首頁的iframe內嵌框架:




iFrame最基本的用法就是這樣: 在一份網頁中以內嵌的方式顯示另一份網頁



STEP 2: iFrame編輯模式
我想很多人都沒想過, iframe可以拿來當作編輯工具吧. (呵呵...小弟用iframe的時候也不知道)


來玩玩看:




你可以在上面輸入文字, 甚至可以直接從Word複製圖片, 或是從Excel剪貼一段試算表過來喔! 自己試試看吧, 很好玩的!

來看看這段原始碼:
<iframe width="400" height="150" id="test">
</iframe>

<script language="Javascript">
<!--
test.document.designMode = "on";
-->
</script>


test 是一個 iframe框架, 只要用Javascript把iframe的designMode (編輯模式) 屬性調為 "on" 就可以了.



STEP 3: 取得輸入值
iframe並不是一種表單元件, 因此無法跟一般的表單 (FORM) 一起傳送...那...該怎麼辦呢?
其實和DIV標籤一樣, iframe也能夠用innerHTML屬性來取得其內容.

試試看:





先試試看輸入一小段文字...
接著, 按下Enter (斷行) 然後再輸入一段文字, 之後再點選 下面的 取得輸入值 按鈕...
你會發現訊息方塊中的是HTML.

來看看這段原始碼:
<iframe width="400" height="150" id="test2">
</iframe>

<script language="Javascript">
<!--
test2.document.designMode = "on";

function showHTML()
{
	alert(test2.document.body.innerHTML);
}
-->
</script><br>
<form><input type="button" value="取得輸入值" onClick="showHTML();"></form>


使用者在iframe編輯模式的輸入, 都會自動被轉換成HTML.

小弟在上一個步驟不是提過可以從Excel直接剪貼試算表過來嗎? 何不在這邊看看剪貼後的試算表的內容, 很有趣喔!



STEP 4: 製作文字工具
這個輸入方塊很方便吧, 不過試想...如果今天我要用這個方塊來寫教學, 我希望能夠使用粗體和底線來強化我的文字效果...難道為了這個我還需要去Word裡面打一遍, 然後再剪貼過來? 這樣...不是很麻煩嗎?

試試看這樣的文字工具:






在上面的方塊你可以輸入一段文字, 圈選剛剛輸入的文字, 然後將其設定為粗體.

來看看這段原始碼:


<form>
<input type="button" value="設定為粗體" onClick="setBold();"><br>
<iframe width="400" height="150" id="test3">
</iframe>
<script language="Javascript">
<!--
test3.document.designMode = "on";

function showHTML2()
{
	alert(test3.document.body.innerHTML);
}

function setBold()
{
	test3.focus();
	Sel = test3.document.selection.createRange();
	Sel.type = test3.document.selection.type;
	Sel.pasteHTML(" <b>" + Sel.text + "</b> ");
}
-->
</script><br>
<input type="button" value="取得輸入值" onClick="showHTML2();"></form>





這段原始碼與上一個步驟唯一的不同就是增加了粗體文字設定工具
請看 setBold() 這個函式.

test3.focus();

這段的意思是先將文字游標放在iframe上 (id為test3), 這樣Javaascript才會在正確的地方貼上加上粗體後的文字

Sel = test3.document.selection.createRange();

這段是創造一個新的物件 Sel, 該物件指向的是您目前圈選的文字 (Selection).

Sel.pasteHTML(" <b>" + Sel.text + "</b> ");

Sel.text是取得該部分的純文字內容, 記得, 是純文字, 不包含HTML喔.
利用pasteHTML()函式, 就可以在原本的選擇區把加上了<b></b>的文字貼上, 也就是加上了粗體的文字囉.

會做粗體, 其他的如加上連結, 加上圖片等等都可以自己發揮.


這個輸入方塊雖然方便 (會自動處理好HTML), 但是實際上他存在很多的問題, 如使用"上一頁"功能的時候, 之前的輸入值就會全部被洗掉...這些問題都是需要自己再去寫script來加強的. 另外就是...這個輸入方便需要較新版本的瀏覽器, 因此如果您考慮使用的話, 記得要準備一份純文字版的輸入方塊給瀏覽器版本較舊的人使用.

小弟在貼出這篇教學的同時應該已經增加了Richtext編輯器到酷必網的文章系統...如果您對於這種輸入方塊有興趣的話, 不妨參考看看酷必網的文章系統.

最後要感謝一下tek兄協助蒐集相關的教學資料

最後更新日期: 12/26/2003 1:58:11 AM