wangEditor編輯器失去焦點(diǎn)后仍然可以在原位置插入圖片分析
昨天在github上發(fā)現(xiàn)了一個(gè)很好的富文本編輯器wangEditor,一看名字就是中國(guó)人寫的。這個(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)的寫法
- 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)文章
JavaScript數(shù)組及非數(shù)組對(duì)象的深淺克隆詳解原理
JavaScript中數(shù)組的方法種類眾多,在ES3-ES7不同版本時(shí)期都有新方法;并且數(shù)組的方法還有原型方法和從object繼承的方法,本文介紹了JavaScript數(shù)組及非數(shù)組對(duì)象的深淺克隆,希望讀者能從中有所收獲2021-10-10
JavaScript實(shí)現(xiàn)簡(jiǎn)單購(gòu)物小表格
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單購(gòu)物小表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
詳解JavaScript 中g(shù)etElementsByName在IE中的注意事項(xiàng)
這篇文章主要介紹了詳解JavaScript 中g(shù)etElementsByName在IE中的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2017-02-02
漂亮實(shí)用的頁(yè)面loading(加載)封裝代碼
要做一個(gè)異步登錄,打算給用戶做一點(diǎn)提示,所以就網(wǎng)上找了點(diǎn)代碼,自己修改新增了一些,做了一個(gè)html+css+js的功能封裝,供大家參考,需要的朋友參考下吧2017-02-02
javaScript 連接打印機(jī),打印小票的實(shí)例
下面小編就為大家分享一篇javaScript 鏈接打印機(jī),打印小票的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
ES6(ECMAScript 6)新特性之模板字符串用法分析
這篇文章主要介紹了ES6(ECMAScript 6)新特性之模板字符串用法,簡(jiǎn)單介紹了ES6模板字符串的概念、功能并結(jié)合實(shí)例形式分析了ES6模板字符串的用法,需要的朋友可以參考下2017-04-04
javascript實(shí)現(xiàn)時(shí)間日期的格式化的方法匯總
這篇文章主要介紹了javascript實(shí)現(xiàn)時(shí)間日期的格式化的方法匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
javascript正則表達(dá)配置擴(kuò)展名并實(shí)現(xiàn)驗(yàn)證
這篇文章主要介紹了javascript正則表達(dá)配置擴(kuò)展名并實(shí)現(xiàn)驗(yàn)證,文章圍繞主題展開(kāi)相關(guān)資料,具有以得參考價(jià)值,需要的小伙伴可以參考一下2022-02-02
javascript用戶注冊(cè)提示效果的簡(jiǎn)單實(shí)例
這個(gè)可以增加用戶驗(yàn)證,不用js alert來(lái)作提示,而是在右邊提示,現(xiàn)在很多網(wǎng)站都這樣做,有需要的朋友可以參考一下2013-08-08
關(guān)于JavaScript中name的意義沖突示例介紹
這篇文章主要介紹了關(guān)于JavaScript中name的意義沖突,需要的朋友可以參考下2014-05-05

