[JQUERY] 의 contentEditable 사업부에 캐럿에 HTML을 삽입
JQUERY의 contentEditable 사업부에 캐럿에 HTML을 삽입
해결법
-
1.대부분의 브라우저에서, 당신은 당신이 선택에서 얻을 Range의 insertNode () 메서드를 사용할 수 있습니다. 당신이 언급 한 바와 같이 IE <9에서는, pasteHTML ()를 사용할 수 있습니다. 다음은 모든 주요 브라우저에서이 작업을 수행 할 수있는 기능입니다. 내용이 이미 선택되어있는 경우이 효율적으로 붙여 넣기 작업 그래서, 그것은 대체됩니다. 또한, 나는 삽입 된 내용의 종료 후 캐럿을 배치하는 코드를 추가했습니다.
대부분의 브라우저에서, 당신은 당신이 선택에서 얻을 Range의 insertNode () 메서드를 사용할 수 있습니다. 당신이 언급 한 바와 같이 IE <9에서는, pasteHTML ()를 사용할 수 있습니다. 다음은 모든 주요 브라우저에서이 작업을 수행 할 수있는 기능입니다. 내용이 이미 선택되어있는 경우이 효율적으로 붙여 넣기 작업 그래서, 그것은 대체됩니다. 또한, 나는 삽입 된 내용의 종료 후 캐럿을 배치하는 코드를 추가했습니다.
jsFiddle : http://jsfiddle.net/jwvha/1/
암호:
function pasteHtmlAtCaret(html) { var sel, range; if (window.getSelection) { // IE9 and non-IE sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); // Range.createContextualFragment() would be useful here but is // only relatively recently standardized and is not supported in // some browsers (IE9, for one) var el = document.createElement("div"); el.innerHTML = html; var frag = document.createDocumentFragment(), node, lastNode; while ( (node = el.firstChild) ) { lastNode = frag.appendChild(node); } range.insertNode(frag); // Preserve the selection if (lastNode) { range = range.cloneRange(); range.setStartAfter(lastNode); range.collapse(true); sel.removeAllRanges(); sel.addRange(range); } } } else if (document.selection && document.selection.type != "Control") { // IE < 9 document.selection.createRange().pasteHTML(html); } }
UPDATE 2013년 8월 21일
코멘트에 요청으로, 여기에 지정 여부가 삽입 된 컨텐츠를 선택하는 것을 추가 매개 변수와 함께 업데이트 된 예이다.
데모 : http://jsfiddle.net/timdown/jwvha/527/
암호:
function pasteHtmlAtCaret(html, selectPastedContent) { var sel, range; if (window.getSelection) { // IE9 and non-IE sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); // Range.createContextualFragment() would be useful here but is // only relatively recently standardized and is not supported in // some browsers (IE9, for one) var el = document.createElement("div"); el.innerHTML = html; var frag = document.createDocumentFragment(), node, lastNode; while ( (node = el.firstChild) ) { lastNode = frag.appendChild(node); } var firstNode = frag.firstChild; range.insertNode(frag); // Preserve the selection if (lastNode) { range = range.cloneRange(); range.setStartAfter(lastNode); if (selectPastedContent) { range.setStartBefore(firstNode); } else { range.collapse(true); } sel.removeAllRanges(); sel.addRange(range); } } } else if ( (sel = document.selection) && sel.type != "Control") { // IE < 9 var originalRange = sel.createRange(); originalRange.collapse(true); sel.createRange().pasteHTML(html); if (selectPastedContent) { range = sel.createRange(); range.setEndPoint("StartToStart", originalRange); range.select(); } } }
-
2.
var doc = document.getElementById("your_iframe").contentWindow.document; // IE <= 10 if (document.selection){ var range = doc.selection.createRange(); range.pasteHTML("<b>Some bold text</b>"); // IE 11 && Firefox, Opera ..... }else if(document.getSelection){ var range = doc.getSelection().getRangeAt(0); var nnode = doc.createElement("b"); range.surroundContents(nnode); nnode.innerHTML = "Some bold text"; };
-
3.빨리 읽고 희망에 의해 주제 오프가 아니라, 여기에 나 같은, 필요 사업부의 커서 수준에서 코드를 삽입 할 수있는, 사람들을위한 트랙이다 :
빨리 읽고 희망에 의해 주제 오프가 아니라, 여기에 나 같은, 필요 사업부의 커서 수준에서 코드를 삽입 할 수있는, 사람들을위한 트랙이다 :
document.getElementById('editeur').contentWindow.document.execCommand('insertHTML', false, '<br />');
'편집기'iframe이 있습니다 :
<iframe id="editeur" src="contenu_editeur_wysiwyg.php"> </iframe>
contenu_editeur_wysiwyg.php :
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> </div> </body> </html>
잊지 마세요 :
document.getElementById('editeur').contentDocument.designMode = "on";
-
4.
var r = getSelection().getRangeAt(0); r.insertNode(r.createContextualFragment('<b>Hello</b>')); //select this range getSelection().removeAllRanges(); getSelection().addRange(r); //collapse to end/start getSelection().collapseToEnd()
from https://stackoverflow.com/questions/6690752/insert-html-at-caret-in-a-contenteditable-div by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] JQuery와 : 어떻게이 완료 크기 조정의 번만 RESIZE 이벤트 호출하려면? (0) | 2020.09.30 |
---|---|
[JQUERY] Google 크롬 로컬 파일에서 URL을로드 XMLHttpRequest 객체를 사용하도록 허용 (0) | 2020.09.30 |
[JQUERY] jQuery를 사용하여 텍스트 문자열을 찾기? (0) | 2020.09.30 |
[JQUERY] 문자열에서 추출 호스트 이름 (0) | 2020.09.30 |
[JQUERY] 메이크업은 iframe 높이를 동적 JQUERY / 자바 스크립트있어 문을 내용에 따라 (0) | 2020.09.30 |