ZSSRichTextEditor 是一個老牌的富文本編輯器,很多富文本編輯器都是在其基礎(chǔ)上進(jìn)行修改并使用的。下文用zss簡稱代替。
作為一個很爛的程序員,第一次接觸基本上不知為何物,看到星星最多,星星多必是精品,誰成想這個大坑,一旦進(jìn)去,甭想上來了;
廢話不多說:今天主要的來說說這個坑和怎么填坑
1、最常見的是編輯時(shí)出現(xiàn)光標(biāo)上下跳動,導(dǎo)致頁面跳動,
? 分析:頁面跳動是由于光標(biāo)定位不準(zhǔn),獲取光標(biāo)的位置不準(zhǔn)確。
? ? ? ? ? ? ? 在zss中有兩個方法執(zhí)行頁面跳動:zss_editor.updateOffset()和zss_editor.calculateEditorHeightWithCaretPosition(),一個是頁面內(nèi)容超出屏幕上邊界自動回滾,一個是頁面底邊界輸入自動換行。頁面跳動的原因是兩個方法同時(shí)執(zhí)行導(dǎo)致光標(biāo)定位不準(zhǔn)上下彈動。
? ? 解決方法:在zss_editor.init =function() 方法中修改zss_editor.updateOffset()方法觸發(fā)方式:
?$(window).on('touchend', function(e) {?? ? ? ? ? ? ? ? if (!zss_editor.isDragging && (e.target.id == "zss_editor_footer"||e.target.nodeName.toLowerCase() == "html")) {? ? ? ? ? ? ? ? ? ? zss_editor.focusEditor();?? ? ? ? ? ? ? ? }else {? ? ? ? ? ? ? ? ? ? zss_editor.updateOffset();?? ? ? ? ? ? ? ? }
在滑動超出上邊界的時(shí)候觸發(fā)zss_editor.updateOffset 進(jìn)行回滾操作。
2、獲取文章第一段純文本:
zss 是一個以div為默認(rèn)標(biāo)簽的的編輯器,在新建文章的時(shí)候輸出的都是div的標(biāo)簽,需求是p標(biāo)簽為藍(lán)本編輯,所以統(tǒng)一轉(zhuǎn)化成br 進(jìn)行正則判斷:
zss_editor.oneGetFirstText = function() {?? ?? ? var str? = document.getElementById("zss_editor_content").innerHTML;? ? let text = str.replace(/^[\s|\n|\r]+|[\s|\n|\r]+$/g,"");? ? text = text.replace(/<span style="display:none;">.<\/span>/g,'');? ? text = text.replace(/ /g,'');? ? text = text.replace(/<div>/g,'<br>');? ? text = text.replace(/<\/p>/g,'<br>');? ? let finalStr;? ? if(text.indexOf("<br>") >= 0){? ? ? ? var temparr = text.split("<br>");? ? ? ? for(let i=0;i<temparr.length;i++){? ? ? ? ? ? temparr[i] = temparr[i].replace(/<[^>]*>|/g,"");? ? ? ? ? ? temparr[i] = temparr[i].replace(/[\s|\n|\r]*/g,"");? ? ? ? ? ? if(temparr[i] && temparr[i] != '.'){? ? ? ? ? ? ? ? finalStr = temparr[i];? ? ? ? ? ? ? ? break;? ? ? ? ? ? }? ? ? ? }? ? }else{? ? ? ? let tempStr = text.replace(/<[^>]*>|/g,"");? ? ? ? finalStr = tempStr.substring(0,20);? ? }? ? return finalStr;}
以上是我的粗略見解,如果不同,提出大家討論討論
補(bǔ)充:獲取文章第一段純文本中iOS10.0 以下對let不支持 可以修改成var !