어제 github에서 좋은 리치 텍스트 편집기 wangEditor를 찾았습니다. 이름은 중국인이 쓴 것입니다. 다행히 이 편집기는 IE6을 지원하는데, 가장 중요한 점은 IE6, 7, 8에서 포커스를 잃은 후에도 여전히 원래 위치에 그림을 삽입할 수 있다는 점과 코드의 양이 매우 적다는 것입니다. 그래서 어떻게 만들어졌는지 너무 궁금해서 살짝 잘라봤습니다
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(); } }
이전 기사 의 kindeditor에서 찍은 패키지보다 훨씬 작으며 한눈에 봐도 깔끔해 보입니다.
사용방법
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(); });
wangEditor의 예는 외부 링크 사진을 삽입하는 것이며, 한 번에 하나의 사진만 삽입할 수 있습니다. wangEditor의 소스 코드는 document.execCommand("insertImage", false,html);를 사용합니다. 하지만 이 방법에는 문제가 있습니다. 즉, IE6, 7, 8에서는 여러 장의 그림을 삽입하려고 하면 원래 위치에 한 장의 그림만 삽입됩니다.
if를 먼저 주석 처리
한 번에 두 장의 사진을 삽입하세요
이번엔 좀 더 조심하세요 ie6
ie7
ie8
해결책은 ie6,7,8, currentRange.pasteHTML(html);인 경우입니다. html을 삽입합니다. 즉, 위의 if 주석을 제거합니다. 물론 삽입되는 내용은 더 이상 이미지 주소가 아니라 이미지 주소가 포함된 전체 img 태그
입니다.
ie6
ie7
ie8
마지막에 예시 첨부위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.