1.修改ueditor.all.js文件中的inserthtml函數
/**
* 插入html代碼
* @command inserthtml
* @method execCommand
* @param { String } cmd 命令字符串
* @param { String } html 插入的html字符串
* @remaind 插入的標簽內容是在當前的選區位置上插入,如果當前是閉合狀態,那直接插入內容, 如果當前是選中狀態,將先清除當前選中內容后,再做插入
* @warning 注意:該命令會對當前選區的位置,對插入的內容進行過濾轉換處理。 過濾的規則遵循html語意化的原則。
* @example
* ```javascr execCommand: function (command,html,notNeedFilter){ var me = this, range, div; if(!html){ return; } if(me.fireEvent('beforeinserthtml',html) ===true){ return; } range = me.selection.getRange(); div = range.document.createElement( 'div' ); div.style.display = 'inline'; if (!notNeedFilter) { var root = UE.htmlparser(html); //如果給了過濾規則就先進行過濾 if(me.options.filterRules){ UE.filterNode(root,me.options.filterRules); } //執行默認的處理 me.filterInputRule(root); html = root.toHtml() } // 禁止safari瀏覽器 if (html.indexOf('webkit-fake-url')>0 || html.indexOf('image.tiff')>0) { if (window.BrowserEvent) { // safari粘貼圖片彈窗提示 BrowserEvent.PReventPasteTip(); setTimeout("BrowserEvent.PreventPasteTip();", 1000); } return; } div.innerHTML = utils.trim( html ); if ( !range.collapsed ) { var tmpNode = range.startContainer; if(domUtils.isFillChar(tmpNode)){ range.setStartBefore(tmpNode) } tmpNode = range.endContainer; if(domUtils.isFillChar(tmpNode)){ range.setEndAfter(tmpNode) } range.txtToElmBoundary(); //結束邊界可能放到了br的前邊,要把br包含進來 // x[xxx]<br/> if(range.endContainer && range.endContainer.nodeType == 1){ tmpNode = range.endContainer.childNodes[range.endOffset]; if(tmpNode && domUtils.isBr(tmpNode)){ range.setEndAfter(tmpNode); } } if(range.startOffset == 0){ tmpNode = range.startContainer; if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){ tmpNode = range.endContainer; if(range.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){ me.body.innerHTML = '<p>'+(browser.ie ? '' : '<br/>')+'</p>'; range.setStart(me.body.firstChild,0).collapse(true) } } } !range.collapsed && range.deleteContents(); if(range.startContainer.nodeType == 1){ var child = range.startContainer.childNodes[range.startOffset],pre; if(child && domUtils.isBlockElm(child) && (pre = child.previousSibling) && domUtils.isBlockElm(pre)){ range.setEnd(pre,pre.childNodes.length).collapse(); while(child.firstChild){ pre.appendChild(child.firstChild); } domUtils.remove(child); } } } var child,parent,pre,tmp,hadBreak = 0, nextNode; //如果當前位置選中了fillchar要干掉,要不會產生空行 if(range.inFillChar()){ child = range.startContainer; if(domUtils.isFillChar(child)){ range.setStartBefore(child).collapse(true); domUtils.remove(child); }else if(domUtils.isFillChar(child,true)){ child.nodeValue = child.nodeValue.replace(fillCharReg,''); range.startOffset--; range.collapsed && range.collapse(true) } } //列表單獨處理 var li = domUtils.findParentByTagName(range.startContainer,'li',true); if(li){ var next,last; while(child = div.firstChild){ //針對hr單獨處理一下先 while(child && (child.nodeType == 3 || !domUtils.isBlockElm(child) || child.tagName=='HR' )){ next = child.nextSibling; range.insertNode( child).collapse(); last = child; child = next; } if(child){ if(/^(ol|ul)$/i.test(child.tagName)){ while(child.firstChild){ last = child.firstChild; domUtils.insertAfter(li,child.firstChild); li = li.nextSibling; } domUtils.remove(child) }else{ var tmpLi; next = child.nextSibling; tmpLi = me.document.createElement('li'); domUtils.insertAfter(li,tmpLi); tmpLi.appendChild(child); last = child; child = next; li = tmpLi; } } } li = domUtils.findParentByTagName(range.startContainer,'li',true); if(domUtils.isEmptyBlock(li)){ domUtils.remove(li) } if(last){ range.setStartAfter(last).collapse(true).select(true) } }else{ while ( child = div.firstChild ) { if(hadBreak){ var p = me.document.createElement('p'); while(child && (child.nodeType == 3 || !dtd.$block[child.tagName])){ nextNode = child.nextSibling; p.appendChild(child); child = nextNode; } if(p.firstChild){ child = p } } range.insertNode( child ); nextNode = child.nextSibling; if ( !hadBreak && child.nodeType == domUtils.NODE_ELEMENT && domUtils.isBlockElm( child ) ){ parent = domUtils.findParent( child,function ( node ){return domUtils.isBlockElm( node ); } ); if ( parent && parent.tagName.toLowerCase() !='body' && !(dtd[parent.tagName][child.nodeName] && child.parentNode === parent)){ if(!dtd[parent.tagName][child.nodeName]){ pre = parent; }else{ tmp = child.parentNode; while (tmp !== parent){ pre = tmp; tmp = tmp.parentNode; } } domUtils.breakParent( child, pre || tmp ); //去掉break后前一個多余的節點 <p>|<[p> ==> <p></p><div></div><p>|</p> var pre = child.previousSibling; domUtils.trimWhiteTextNode(pre); if(!pre.childNodes.length){ domUtils.remove(pre); } //trace:2012,在非ie的情況,切開后剩下的節點有可能不能點入光標添加br占位 if(!browser.ie && (next = child.nextSibling) && domUtils.isBlockElm(next) && next.lastChild && !domUtils.isBr(next.lastChild)){ next.appendChild(me.document.createElement('br')); } hadBreak = 1; } } var next = child.nextSibling; if(!div.firstChild && next && domUtils.isBlockElm(next)){ range.setStart(next,0).collapse(true); break; } range.setEndAfter( child ).collapse(); } child = range.startContainer; if(nextNode && domUtils.isBr(nextNode)){ domUtils.remove(nextNode) } //用Chrome可能有空白展位符 if(domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)){ if(nextNode = child.nextSibling){ domUtils.remove(child); if(nextNode.nodeType == 1 && dtd.$block[nextNode.tagName]){ range.setStart(nextNode,0).collapse(true).shrinkBoundary() } }else{ try{ child.innerHTML = browser.ie ? domUtils.fillChar : '<br/>'; }catch(e){ range.setStartBefore(child); domUtils.remove(child) } } } //加上true因為在刪除表情等時會刪兩次,第一次是刪的fillData try{ range.select(true); }catch(e){} } setTimeout(function(){ range = me.selection.getRange(); // 此行代碼是控制插入表情之后頁面滾動的 // range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled ? domUtils.getXY(me.iframe).y:0); me.fireEvent('afterinserthtml', html); },200); } };
新聞熱點
疑難解答