>  기사  >  웹 프론트엔드  >  wangEditor 편집기가 초점을 잃은 후에도 원래 위치에 이미지 분석을 삽입할 수 있습니다_javascript 기술

wangEditor 편집기가 초점을 잃은 후에도 원래 위치에 이미지 분석을 삽입할 수 있습니다_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:00:442023검색

어제 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();
  });
이전 글과 동일하게 에디터의 div에서 keyup과 mouseup 바인딩을 수행해야 선택 범위와 범위를 저장하여 포커스를 잃은 후에도 이미지가 원래 위치에 계속 삽입될 수 있습니다. 호출할 때 Image(html)를 직접 삽입하면 됩니다. 여기서 사용된 것은 iframe이 아니라 div contenteditable=true입니다.

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

마지막에 예시 첨부

다운로드

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.