wangEditor編輯器失去焦點(diǎn)后仍然可以在原位置插入圖片分析
昨天在github上發(fā)現(xiàn)了一個(gè)很好的富文本編輯器wangEditor,一看名字就是中國(guó)人寫(xiě)的。這個(gè)編輯器好在支持ie6+,另外最重要的一點(diǎn),它在ie6,7,8上都可以做到失去焦點(diǎn)后仍然可以在原位置插入圖片,而且代碼量很少。于是很好奇的看看它是怎么做的,裁剪了一下,就這些
var currentRange,_parentElem,supportRange = typeof document.createRange === 'function';
function getCurrentRange() {
var selection,
range,
txt = $('editor');
if(supportRange){
selection = document.getSelection();
if (selection.getRangeAt && selection.rangeCount) {
range = document.getSelection().getRangeAt(0);
_parentElem = range.commonAncestorContainer;
}
}else{
range = document.selection.createRange();
_parentElem = range.parentElement();
}
if( _parentElem && (avalon.contains(txt, _parentElem) || txt === _parentElem) ){
parentElem = _parentElem;
return range;
}
return range;
}
function saveSelection() {
currentRange = getCurrentRange();
}
function restoreSelection() {
if(!currentRange){
return;
}
var selection,
range;
if(supportRange){
selection = document.getSelection();
selection.removeAllRanges();
selection.addRange(currentRange);
}else{
range = document.selection.createRange();
range.setEndPoint('EndToEnd', currentRange);
if(currentRange.text.length === 0){
range.collapse(false);
}else{
range.setEndPoint('StartToStart', currentRange);
}
range.select();
}
}
這可比上一篇里面的那個(gè)從kindeditor扒下來(lái)的封裝少太多了,而且看起來(lái)也是一目了然。
怎么用呢
function insertImage(html){
restoreSelection();
if(document.selection)
currentRange.pasteHTML(html);
else
document.execCommand("insertImage", false,html);
saveSelection();
}
avalon.bind($('post_input'),'mouseup',function(e){
saveSelection();
});
avalon.bind($('post_input'),'keyup',function(e){
saveSelection();
});
和上一篇里面一樣,必須要對(duì)編輯器的div進(jìn)行keyup,mouseup綁定,以便保存selection,range,方便在失去焦點(diǎn)后仍然可以在原來(lái)位置插入圖片。調(diào)用的時(shí)候直接insertImage(html)就可以了。這里用的不是iframe,是div contenteditable=true.
wangEditor里面的例子是插入外鏈圖片,一次只能插入一張圖片。wangEditor源碼統(tǒng)一用的是document.execCommand("insertImage", false,html);。但是這個(gè)方法有個(gè)問(wèn)題,就是在ie6,7,8中,如果要插入多張圖片的話,只會(huì)在原來(lái)位置插入一張圖片。
先把if注釋掉

一次插入兩張圖片

這次嚴(yán)謹(jǐn)點(diǎn),ie6

ie7

ie8

解決方法是如果是ie6,7,8的話,currentRange.pasteHTML(html); 。插入html,也就是把上面的if注釋去掉.當(dāng)然插入的不再是圖片地址了,現(xiàn)在是包含圖片地址的整個(gè)img標(biāo)簽
ie6

ie7

ie8

最后附上例子下載
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- 文本框點(diǎn)擊時(shí)文字消失,失去焦點(diǎn)時(shí)文字出現(xiàn)
- jquery-1.2.6得到焦點(diǎn)與失去焦點(diǎn)的寫(xiě)法
- js 失去焦點(diǎn)時(shí)關(guān)閉層實(shí)現(xiàn)代碼
- 文本框獲得焦點(diǎn)和失去焦點(diǎn)的判斷代碼
- 在js(jquery)中獲得文本框焦點(diǎn)和失去焦點(diǎn)的方法
- input 輸入框獲得/失去焦點(diǎn)時(shí)隱藏/顯示文字(jquery版)
- jquery獲取焦點(diǎn)和失去焦點(diǎn)事件代碼
- div失去焦點(diǎn)事件實(shí)現(xiàn)思路
- textarea焦點(diǎn)的用法實(shí)現(xiàn)獲取焦點(diǎn)清空失去焦點(diǎn)提示效果
相關(guān)文章
簡(jiǎn)易的投票系統(tǒng)以及js刷票思路和方法
這篇文章主要介紹了簡(jiǎn)易的投票系統(tǒng)以及js刷票思路和方法,文章十分的詳盡,思路也很清晰,是篇非常不錯(cuò)的文章,這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04
JSON.parse損壞大數(shù)字的原因解析及解決方案
從10多年前JSON在線編輯器的早期開(kāi)始,用戶經(jīng)常反映編輯器有時(shí)會(huì)破壞他們JSON文檔中的大數(shù)字的問(wèn)題,這篇文章主要介紹了為什么JSON.parse會(huì)損壞大數(shù)字,如何解決這個(gè)問(wèn)題,需要的朋友可以參考下2022-10-10
Javascript前端UI框架Kit使用指南之kitjs事件管理
本文詳細(xì)介紹了Kitjs的事件管理功能,包括普通的Dom事件、Kit如何解決問(wèn)題、代碼解析、注銷(xiāo)事件等。需要的朋友可以參考下。2014-11-11
webpack 3.X學(xué)習(xí)之多頁(yè)面打包的方法
這篇文章主要介紹了webpack 3.X學(xué)習(xí)之多頁(yè)面打包的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
javascript 動(dòng)態(tài)創(chuàng)建表格的2種方法總結(jié)
本文給大家總結(jié)了2種使用javascript動(dòng)態(tài)創(chuàng)建表格的方法,非常簡(jiǎn)單實(shí)用,小伙伴們自己對(duì)比下看看哪種更適合你呢,一般本人是使用第一種的。2015-03-03
JS簡(jiǎn)單實(shí)現(xiàn)禁止訪問(wèn)某個(gè)頁(yè)面的方法
這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)禁止訪問(wèn)某個(gè)頁(yè)面的方法,涉及基本的頁(yè)面跳轉(zhuǎn)操作技巧,需要的朋友可以參考下2016-09-09
很不錯(cuò)的兩款Bootstrap Icon圖標(biāo)選擇組件
這篇文章主要介紹了不容錯(cuò)過(guò)的兩款Bootstrap Icon圖標(biāo)選擇組件,支持自定義的圖標(biāo),拿出來(lái)分享下,絕對(duì)的干貨,感興趣的小伙伴們可以參考一下2016-01-01

