2010-01-13 5 views

답변

7

예 keydown 이벤트를 먼저 중지하고 (window.event.stopPropagation();) 문단 삽입을 피하고 삽입물 HTML command을 사용하여 문자열을 삽입 할 수 있습니다.

그러나 IE는이 divs 스타일 설정 등에 따라 다르며 <br>을 사용하면 문제가 발생할 것입니다.

TinyMCE or other editors과 같은 프로젝트를 사용하고 다른 브라우저 문제에 대한 모든 종류의 해결 방법이 있으므로 원하는대로 동작하는 편집기를 검색해보십시오. 아마 당신은 < BR에게 >의를 사용하는 편집기 ...

+1

나누기 취소이 전략을. Enter를 누를 때마다 DOM을 변경하므로 사용자는 더 이상 실행 취소 메뉴를 사용하여 변경 사항을 취소 할 수 없습니다! –

+2

명령을 사용하여 DOM을 조작해도 실행 취소가 취소되지 않습니다. 모든 명령을 취소 할 수 있습니다. 물론 div.innerHTML = "foo"와 같은 것을 피해야합니다. –

6

에 대한 설정이 여기에 솔루션 (jQuery를 사용)의를 찾을 수 있습니다. 'BR로 변경'버튼을 클릭하면 <p></p> 태그 대신 <br> 태그가 삽입됩니다.

HTML :

<div id='editable' contentEditable="true"> 
This is a division that is content editable. You can position the cursor 
within the text, move the cursor with the arrow keys, and use the keyboard 
to enter or delete text at the cursor position. 
</div> 
<button type="button" onclick='InsertBR()'>Change to BR</button> 
<button type="button" onclick='ViewSource()'>View Div source</button> 

자바 스크립트 :

function InsertBR() 
{ 
    $("#editable").keypress(function(e) { 
     if (e.which == 13) 
     { 
      e.preventDefault(); 
      document.selection.createRange().pasteHTML("<br/>")  
     } 
    }); 
} 

function ViewSource() 
{   
    var div = document.getElementById('editable'); 
    alert('div.innerHTML = ' + div.innerHTML); 
} 

Theselinkshelped. 작업 예제 here.

+1

IE11 +에서'pasteHTML()'대신'insertNode()'를 사용하고 [여기]에서 언급 한 크로스 브라우저 (http://stackoverflow.com/questions/6690752/insert-html-at-caret-in-a-contenteditable) -div/6691294 # 6691294) –

5

당신은 항상 + 이 한 줄의 반환을위한를 입력하고 단락 반환을위한를 입력 SHIFT를 사용하는 방법을 배우게 할 수 있습니다. IE는 이와 관련하여 MS Word처럼 작동합니다.

1

하여 편집 <div> 작품 내부의 <p>line-height 변경 :

#editable_div p 
{ 
    line-height: 0px; 
} 
관련 문제