亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

在線所見即所得HTML編輯器的實現原理淺析

2024-05-06 16:18:48
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了在線所見即所得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('<html><head><mce:style type="text/css"><!--
body{border:0;margin:0;padding:3px;height:98%;cursor:text;}
--></mce:style><style type="text/css" mce_bogus="1">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>');
//打開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代碼,調整是比較痛苦的事情。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久免费观看视频| 成人h猎奇视频网站| 国产精彩精品视频| 一区二区三区国产视频| 日韩av有码在线| 欧美中在线观看| 欧美一级大胆视频| 91人成网站www| 国产亚洲精品综合一区91| 日韩精品极品视频| 亚洲免费人成在线视频观看| 欧美大荫蒂xxx| 久久久精品电影| 成人春色激情网| 亚洲成年人影院在线| 亚洲第一色中文字幕| 国产精品久久久久久久久久久久久| 色久欧美在线视频观看| 91成人福利在线| 91精品国产成人| 国产精品综合网站| 成人在线精品视频| 日韩精品免费在线视频观看| 欧美日韩国产一区二区| 成人性生交大片免费观看嘿嘿视频| 亚洲第一精品福利| 亚洲精品国产品国语在线| 亚洲视频日韩精品| 97av在线播放| 国产精品无码专区在线观看| 欧美劲爆第一页| 狠狠躁天天躁日日躁欧美| 国产精自产拍久久久久久| 欧美激情喷水视频| 亚洲成人av中文字幕| 国产精品激情自拍| 亚洲精品乱码久久久久久按摩观| 欧美性理论片在线观看片免费| 亚洲精品mp4| 亚洲天堂免费观看| 亚洲乱码国产乱码精品精| 国产成+人+综合+亚洲欧美丁香花| www.欧美免费| 国产精品视频一区二区三区四| 欧美日韩亚洲一区二| 国产做受高潮69| 国产精品久久综合av爱欲tv| 国内精品久久久久久中文字幕| 亚洲午夜精品久久久久久久久久久久| 成人黄色免费网站在线观看| 亚洲香蕉av在线一区二区三区| 亚洲电影第1页| 国产成人av在线播放| 国产精品视频在线播放| 色婷婷av一区二区三区在线观看| 亚洲欧洲激情在线| 国产精品吊钟奶在线| 91免费视频网站| 日韩av网站导航| 色综合久综合久久综合久鬼88| 亚洲天堂影视av| 欧美日韩亚洲一区二区三区| 欧美特黄级在线| 精品亚洲一区二区三区| 欧美一级视频一区二区| 97超碰色婷婷| 色777狠狠综合秋免鲁丝| 日韩av一区二区在线观看| 久久精品国产久精国产一老狼| 97热精品视频官网| 亚洲精品xxxx| 亚洲欧美一区二区三区在线| 亚洲欧美国产一本综合首页| 中文字幕在线精品| 午夜精品www| 日韩欧美a级成人黄色| 亚洲欧美在线一区二区| 精品无人区太爽高潮在线播放| 尤物九九久久国产精品的特点| 91av视频在线| 91成人福利在线| 亚洲成人av中文字幕| 日韩免费av片在线观看| 国产91网红主播在线观看| 91成人精品网站| 日本中文字幕久久看| 黑人巨大精品欧美一区二区免费| 97久久伊人激情网| 国产精品狠色婷| 欧美国产视频日韩| 国产又爽又黄的激情精品视频| 精品国产乱码久久久久酒店| 57pao国产精品一区| 亚洲精品v天堂中文字幕| 国产亚洲精品久久久久动| 狠狠做深爱婷婷久久综合一区| 中文字幕亚洲一区在线观看| 亚洲精品乱码久久久久久按摩观| 国产精品亚发布| 日韩欧美在线中文字幕| 久久久久久久久久久亚洲| 国产91在线播放精品91| 国产视频精品在线| 国产精品最新在线观看| 国产欧美一区二区三区在线看| 美女撒尿一区二区三区| 亚洲国产精品yw在线观看| 久久久久久久久久久免费精品| 日韩精品视频在线免费观看| 色综合久久久久久中文网| 国产精品视频区| 欧美怡红院视频一区二区三区| 欧美成人午夜免费视在线看片| 国产91色在线|免| 91精品在线观看视频| 国产精品电影在线观看| 亚洲第一av网| 夜夜躁日日躁狠狠久久88av| 97视频人免费观看| 欧美性资源免费| 亚洲精品av在线| 亚洲福利视频二区| 国产成人免费91av在线| 色偷偷噜噜噜亚洲男人的天堂| 久久精品电影网| 亚洲精品不卡在线| 国产在线视频不卡| 91中文在线观看| 国产日韩在线免费| 亚洲精品黄网在线观看| 欧美高清不卡在线| 操人视频在线观看欧美| 性欧美xxxx视频在线观看| 热久久99这里有精品| 色综合久久天天综线观看| 久久在线观看视频| 高清亚洲成在人网站天堂| 亚洲国产精品一区二区三区| 日韩中文有码在线视频| 欧美精品中文字幕一区| 国a精品视频大全| 久久久久北条麻妃免费看| 色中色综合影院手机版在线观看| 亚洲精品自拍视频| 久久久久久久久中文字幕| 欧美黑人狂野猛交老妇| 久久久久久久久久久免费| 欧美大片免费观看| 中文字幕在线看视频国产欧美| 欧美性视频在线| 狠狠躁天天躁日日躁欧美| 国产精品日韩在线一区| 91夜夜未满十八勿入爽爽影院| 国产成人激情小视频| 韩剧1988在线观看免费完整版| xxav国产精品美女主播| 国产97人人超碰caoprom| 亚洲一二在线观看| 国产精品极品美女在线观看免费| 亚洲电影成人av99爱色| 欧洲亚洲免费在线| 欧美激情在线播放| 国内精品久久久久久影视8| 国外成人在线视频|