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

首頁 > 開發 > 綜合 > 正文

HTML編輯器fckeditor代碼語法高亮

2024-07-21 02:53:32
字體:
來源:轉載
供稿:網友
這兩個星期有點空,就再研究了一下語法高亮的問題,找了一下FCKeditor官方網站,發現2.5.1穩定版已經出來了,首先替換掉舊的2.0。呵呵,我喜歡使用新版。
 
先是IE: 
1、遺留的問題:隱藏的源碼和格式化后的代碼有會有問題。 
經上次研究的結果,兩處的代碼有可能不對,主要是HTML的特別代碼,像代碼里有標簽<div>,JavaScript代碼里有&alt等。這里的解決方法很簡單:只要替換一下就可以了,不過要注意,在進行格式化之前就進行替換。因為隱藏的代碼也是要替換的,最后取的時候也要替換回去,但是要反順序。代碼如下:
復制代碼代碼如下:

.replace(/&/g, "&") 
.replace(/</g, "<") 
.replace(/>/g,'>'); 

2、在FCKeditor里很多控件都有右鍵菜單可以修改其屬性,代碼高亮我也想增加一個!到FCKeditor官方網站找了一遍成功的增加了,代碼如下(代碼放在fckplugin.js):
復制代碼代碼如下:

// 添加右鍵菜單 
FCK.ContextMenu.RegisterListener( { 
AddItems : function( menu, tag, tagName ) 

if (!tag) 
return; 

var oDiv = tag; 

// 循環的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素 
while (oDiv.parentNode){ 
if (oDiv.tagName == usingTag && oDiv.className == usingFlag) 
break; 
oDiv = oDiv.parentNode; 


// under what circumstances do we display this option 
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) ) 

FCKSelection.SelectNode( oDiv ) ; 
// when the option is displayed, show a separator the command 
menu.AddSeparator() ; 
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ; 

}} 
); 

3、試用了一下效果,發現雙擊修改時只能雙擊代碼行數左邊的灰色才能彈出修改。我覺得不大方便,如果雙擊代碼處也可以彈出修改就方便多了!嘿嘿,答案是肯定的,之前的代碼已經注冊了DIV標簽的雙擊事件,所以再注冊一下格式化后的代碼用到的SPAN和LI標簽就可以了,代碼如下(代碼放在fckplugin.js): 
復制代碼代碼如下:

// 添加雙擊事件 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 雙擊灰色欄 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 雙擊代碼 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 雙擊代碼區空白 
// 添加雙擊事件 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 雙擊灰色欄 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 雙擊代碼 
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 雙擊代碼區空白 

4、再試一下,發現雙擊代碼行數這里可以進行修改。但是雙擊代碼就不行,拿不到隱藏的源碼。原因是因為在代碼里雙擊的不是頂層元素,那簡單,修改一下雙擊的代碼,取得頂層元素就OK了(代碼放在fckplugin.js): 
復制代碼代碼如下:

/ /雙擊事件處理代碼 
FCKHighLighter.OnDoubleClick = function( div ){ 
var oDiv = div; 

// 循環的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素 
while (oDiv.parentNode){ 
if (oDiv.tagName == usingTag && oDiv.className == usingFlag) 
break; 
oDiv = oDiv.parentNode; 


if(oDiv.tagName == usingTag && oDiv.className == usingFlag) { 
FCKSelection.SelectNode( oDiv ) ; 
FCKCommands.GetCommand( 'HighLighter' ).Execute() ; 

}

5、把編輯轉到源代碼再轉回來的時候發現高亮的代碼已經不可以編輯了。研究之下發現是用于標識的屬性沒有了,因為這個標識的屬性是非標準的HTML屬性。這個也好辦,反正頂層的class屬性沒用,就直接拿來用就可以了。這個簡單,我就不給代碼了。 
IE里的修改算是完成了,而且比較完美。 
再來FF: 
  本人用系統,用軟件都用得比較雜,有時候會用用FF,所以修改的東西一定要支持FF。再說,FCKeditor本身是兼容IE和FF的,增加的插件只支持IE有點說不過去。 
1、首先試用了一下效果:發現已經可以插入,不過不可以修改。雙擊事件也有效,但也是不能修改。這個原因是因為FF跟IE不同,IE里可以把DIV標簽直接選擇,FF里不可以。所以要加一個單擊的事件,讓代碼幫助FF選擇頂層元素,原始代碼是從FCKeditor的Placeholder插件里COPY過來的(代碼放在fckplugin.js): 
復制代碼代碼如下:

// 單擊事件處理代碼 
FCKHighLighter._ClickListener = function( e ) 

var oDiv = e.target; 

// 循環的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素 
while (oDiv.parentNode){ 
if (oDiv.tagName == usingTag && oDiv.className == usingFlag) 
break; 
oDiv = oDiv.parentNode; 


if ( oDiv.tagName == usingTag && oDiv.className == usingFlag ) 
FCKSelection.SelectNode( oDiv ) ; 


FCKHighLighter._SetupClickListener = function (){ 
if (FCKBrowserInfo.IsGecko) 
FCK.EditorDocument.addEventListener( 'click', FCKHighLighter._ClickListener, true ) ; 


// 添加單擊事件 
FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKHighLighter._SetupClickListener ) ; 

// 添加右鍵菜單 
FCK.ContextMenu.RegisterListener( { 
AddItems : function( menu, tag, tagName ) 

if (!tag) 
return; 

var oDiv = tag; 

// 循環的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素 
while (oDiv.parentNode){ 
if (oDiv.tagName == usingTag && oDiv.className == usingFlag) 
break; 
oDiv = oDiv.parentNode; 


// under what circumstances do we display this option 
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) ) 

FCKSelection.SelectNode( oDiv ) ; 
// when the option is displayed, show a separator the command 
menu.AddSeparator() ; 
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ; 

}} 
); 

注明:這個需要修改FCKeditor的核心代碼,因為我發現在2.5.1版本在FF下不可以修改選擇的元素,但是最新的2.6測試版就可以。所以需要修改_source/internals/fckselection_gecko.js文件里的GetSelectedElement函數,并且使用官方工具fckpackager.exe重新打包JavaScript代碼,這個我有空再寫一下。 
  到這里已經差不多了,其中還有一些小問題沒有說,例如:高亮的代碼里可以直接修改(為標簽增加一個contentEditable='false'就完了),JS代碼兼容要使用parentNode不要使用parentElement等。 
  本來想在添加代碼的窗口也增加一個實時語法高亮的編輯器,不過上網找了一下用得比較多的CodePress和EditArea都存在一些BUG,特別是在IE7下,所以還是暫時不添加了。日后再修改。 
  增加這個插件修改的容易比較多,如果你遇到什么問題可以留言,我會盡力為你解答。 
  下一步再為FCKeditor增加一個在線上傳圖片的插件,這樣在別處轉載文章時就方便多了,點一下就可以自動上傳所有圖片,哈哈哈。。。


注:相關教程知識閱讀請移步到編輯器頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美另类| 国产精品久久久久久久一区探花| 57pao成人国产永久免费| 精品亚洲一区二区三区四区五区| 国产精品69久久久久| 亚洲免费电影在线观看| 欧美视频裸体精品| 久久精品视频免费播放| 一区二区三区高清国产| 亚洲精品国产精品国产自| 粉嫩老牛aⅴ一区二区三区| 欧美国产日韩中文字幕在线| 两个人的视频www国产精品| 久久久久久亚洲精品中文字幕| 成人免费大片黄在线播放| 青青久久av北条麻妃海外网| 91日本在线视频| 亚洲欧美日韩视频一区| 热99精品里视频精品| 国产深夜精品福利| 亚洲一区二区三区乱码aⅴ蜜桃女| 午夜精品美女自拍福到在线| 欧美大成色www永久网站婷| 国内精品久久久久久| 亚洲综合成人婷婷小说| 欧美一级电影在线| 91视频-88av| 狠狠躁夜夜躁人人躁婷婷91| 亚洲视频欧美视频| 久久久久久久久国产精品| 欧美视频在线免费看| 91夜夜未满十八勿入爽爽影院| 美女国内精品自产拍在线播放| 久久精品久久久久电影| 国产视频久久网| xxxx欧美18另类的高清| 亚洲精品美女久久久| 欧美成年人在线观看| 亚洲国产精品美女| 国产精品爽爽爽爽爽爽在线观看| 欧美日韩亚洲视频| 国产精品国产三级国产aⅴ9色| 日韩av在线免费播放| 国产精品h在线观看| xxxxx成人.com| 久久这里只有精品99| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲欧美在线播放| 91久久夜色精品国产网站| 国产aⅴ夜夜欢一区二区三区| 欧美成人精品影院| 国色天香2019中文字幕在线观看| 国产精品精品久久久久久| 色综合天天综合网国产成人网| 国产成人精品在线| 91在线免费网站| 欧美性xxxxxxxxx| 欧美午夜www高清视频| 精品亚洲va在线va天堂资源站| 97香蕉超级碰碰久久免费的优势| 国产精品高潮粉嫩av| 国产精品日韩一区| 国产视频久久久| 国产精品亚洲一区二区三区| 亚洲欧美日韩精品久久亚洲区| 日韩电影免费在线观看| 精品小视频在线| 欧美极品美女视频网站在线观看免费| 国产伦精品一区二区三区精品视频| 97视频在线观看免费高清完整版在线观看| 久久琪琪电影院| 一区二区国产精品视频| 国产精品视频999| 色多多国产成人永久免费网站| 欧美激情精品久久久久久变态| 久久免费观看视频| 久久国产精品久久久| 日韩视频―中文字幕| 亚洲高清一区二| 中文字幕亚洲图片| 国模叶桐国产精品一区| 亚洲性日韩精品一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲精品午夜精品| 成人综合国产精品| 国产精品久久一| 狠狠操狠狠色综合网| 亚洲精品日韩久久久| 欧美成人免费在线观看| 欧美国产日韩xxxxx| 日韩视频第一页| 亚洲国产精品久久久久秋霞蜜臀| 欧美黑人又粗大| 亚洲最新中文字幕| 日韩高清电影免费观看完整版| 久久精品国产一区二区三区| 青青青国产精品一区二区| 日韩免费在线观看视频| 日韩在线观看成人| 国产一区二区三区视频| 成人激情av在线| 91色中文字幕| 国产精品日韩在线观看| 精品国产一区二区三区久久久| 精品一区精品二区| 国语自产在线不卡| 91精品国产成人| 欧美日韩国产二区| 亚洲欧美日韩精品久久| 欧洲成人免费aa| 国产女人精品视频| 欧美巨乳在线观看| 国产精品一区二区三区久久| 欧美日本黄视频| 97久久精品在线| 欧美野外wwwxxx| 精品视频久久久久久| 成年人精品视频| 91精品国产自产在线老师啪| 在线不卡国产精品| 亚洲欧美日韩第一区| 欧美在线一区二区三区四| 亚洲精品美女久久| 日韩av在线天堂网| 精品日韩美女的视频高清| 国产欧美va欧美va香蕉在| 美日韩丰满少妇在线观看| 久久久久国产精品免费| 欧美一级大片视频| 欧美在线一区二区三区四| 国产91成人在在线播放| 日韩中文字幕视频在线| 欧美在线视频一二三| 亚洲第一在线视频| 欧美性生活大片免费观看网址| 欧美日韩国产成人在线观看| 97成人精品视频在线观看| 国产亚洲视频在线观看| 国产日韩精品在线观看| 午夜精品久久久久久久99黑人| 欧美日韩亚洲高清| 欧美日韩在线视频观看| 亚洲福利视频专区| 久久精品一本久久99精品| 91精品久久久久久久久青青| 国产一区二区三区四区福利| 欧美成人手机在线| 在线a欧美视频| 久久久久国产精品一区| 九九热视频这里只有精品| 国产精品69精品一区二区三区| 亚洲福利小视频| 国模精品视频一区二区| 亚洲欧洲av一区二区| 欧美成人在线免费| 一本色道久久88综合日韩精品| 国产精品久久不能| 九九久久国产精品| 福利视频一区二区| 亚洲无av在线中文字幕| 欧美日韩国产限制| 亚洲2020天天堂在线观看| 欧美成人黄色小视频| 欧美裸体xxxx极品少妇软件|