首頁 web前端 js教程 在線所見即所得HTML編輯器的實作原理淺析_javascript技巧

在線所見即所得HTML編輯器的實作原理淺析_javascript技巧

May 16, 2016 pm 04:02 PM
html 實現原理 編輯器

如今網站開發越來越提倡使用者體驗,提供使用者便利的工具也越來越多,而線上的HTML內容編輯器應該算是其中比較「古老」的一個了。功能簡單的可以為使用者提供文字的樣式控制,例如文字的顏色、字體大小等;而功能複雜的甚至可以提供類似Word一樣的強大功能。雖然現在各種開源的編輯器非常多,但是真正好用的並不多,所以它們改進工作也一直在進行中。

如今網路上多數的編輯器都有很強大的功能,相對而言,在使用上也需要很多的配置,當然程式碼也自然會比較「臃腫」。如果我們並不需要功能那麼強大的編輯器,那麼可以自己實作一個,因為程式碼並不複雜。以下是一點個人的經驗,僅供參考(以ExtJS的HTMLEditor為例)。

1、初始化。當頁面載入完畢後,向頁面新增一個IFrame(可選)。這裡要注意的是,要判斷頁面的狀態,要等頁面完全載入完畢後再進行操作,以防止找不到某些元素的錯誤。

2、開啟編輯功能。將IFrame設為可以編輯(下面程式碼來自ExtJS的HTMLEditor):

複製程式碼 程式碼如下:

// 取得iframe的window物件
getWin : function(){
        return Ext.isIE ? this.iframe.contentWindow : window.frames[this.iframe.name];
    },

//取得iframe的document物件
getDoc : function(){
        return Ext.isIE ? this.getWin().document : (this.iframe.contentDocument || this.getWin().document);
},

//開啟document對象,向其寫入初始化內容,以相容FireFox
doc = this.getDoc();
doc.open();
doc.write('

');
//開啟document物件編輯模式
 doc.designMode = "on";
doc.close();

這樣就可以寫入內容給這個簡單那的編輯器了。
 
3.取得編輯器的內容,程式碼如下:

複製程式碼 程式碼如下:

//取得編輯器的body物件
var body = doc.body || doc.documentElement;
//取得編輯器的內容
var content = body.innerHTML;
//對內容進行處理,例如替換其中的某些特殊字元等等
//Some code

//返回內容
return content;

 4、增加樣式設定。上面的編輯器雖然實現了基本功能,但實在是有些太簡單了,應該要增加些簡單的樣式實作。 document的execCommand方法使這種想法成為可能。

複製程式碼 程式碼如下:

//統一的執行指令方法
function execCmd(cmd, value){
    //doc物件的取得參考上面的程式碼
     //呼叫execCommand方法執行指令
    doc.execCommand(cmd, false, value === undefined ? null : value);
};

//將選取字體變成黑體,Ctrl-B
execCmd('bold');
//加底線,Ctrl-U
execCmd('underline');
//變成斜體,Ctrl-I
execCmd('italic');
//設定文字的顏色
execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#' color : color);
//在遊標處插入一段內容
function insertAtCursor(text){
  //win物件的取得參考上面的程式碼
  if(Ext.isIE){
      win.focus();
      var r = doc.selection.createRange();
      if(r){
        r.collapse(true);
        r.pasteHTML(text);      }
    }else if(Ext.isGecko || Ext.isOpera){
      win.focus();
      execCmd('InsertHTML', text);
    }else if(Ext.isSafari){
      execCmd('InsertText', text);
    }
  }

5、再進一步。如今可以改變樣式了,如果編輯器有工具列(這應該是必然的),那麼我們還想工具列上的按鈕根據遊標所處位置的樣式,自動處於突出或正常顯示。 document的queryCommandState()方法又讓這個想法得以實現。

複製程式碼 程式碼如下:

//doc物件的取得參考上面的對面
//遊標處是否為粗體
var isBold = doc.queryCommandState('bold');
if(isBold){
  //改變Bold按鈕的樣式
}
//當然上面的程式碼是可以合併的,這裡只不過是一個示意


//底線
doc.queryCommandState('underline');
//斜體
doc.queryCommandState('italic');

本文只是為實作編輯器提供了簡單的思路,其中的一些程式碼是可以直接使用的。建議,想自己實作編輯器的朋友可以參考下ExtJS中的HTMLEditor程式碼,既簡單又比較清晰,可以在其上進行擴充。

最後提醒一點:一定要注意瀏覽器的相容性問題,並且不要等接近尾聲了再去測試相容性,對於這麼大量的JavaScript程式碼,調整是比較痛苦的事情。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles