IE11에서는 execCommand가 제대로 작동하지 않습니다. IE11 <div class="wmd-input" id="wmd-input-md" contenteditable=true>
에 대한 아래 코드
는 내 div 상자입니다.
window.clipboardData에서 클립 보드 데이터를 읽고 div의 textContent를 수정하고 캐럿을 제공합니다.
타임 아웃을 설정하지 않으면 캐럿이 div의 끝으로 이동하기 때문에 캐럿 설정에 대한 타임 아웃을 제공합니다.
IE11에서 다음과 같이 클립 보드 데이터를 읽어야합니다. 하지 않으면 개행 문자가 제대로 처리되지 않아 캐럿이 잘못됩니다.
var tempDiv = document.createElement("div");
tempDiv.textContent = window.clipboardData.getData("text");
var text = tempDiv.textContent;
IE11 및 크롬에서 테스트되었습니다. IE9에서는 작동하지 않을 수 있습니다.
document.getElementById("wmd-input-md").addEventListener("paste", function (e) {
if (!e.clipboardData) {
//For IE11
e.preventDefault();
e.stopPropagation();
var tempDiv = document.createElement("div");
tempDiv.textContent = window.clipboardData.getData("text");
var text = tempDiv.textContent;
var selection = document.getSelection();
var start = selection.anchorOffset > selection.focusOffset ? selection.focusOffset : selection.anchorOffset;
var end = selection.anchorOffset > selection.focusOffset ? selection.anchorOffset : selection.focusOffset;
selection.removeAllRanges();
setTimeout(function () {
$(".wmd-input").text($(".wmd-input").text().substring(0, start)
+ text
+ $(".wmd-input").text().substring(end));
var range = document.createRange();
range.setStart(document.getElementsByClassName("wmd-input")[0].firstChild, start + text.length);
range.setEnd(document.getElementsByClassName("wmd-input")[0].firstChild, start + text.length);
selection.addRange(range);
}, 1);
} else {
//For Chrome
e.preventDefault();
var text = e.clipboardData.getData("text");
var selection = document.getSelection();
var start = selection.anchorOffset > selection.focusOffset ? selection.focusOffset : selection.anchorOffset;
var end = selection.anchorOffset > selection.focusOffset ? selection.anchorOffset : selection.focusOffset;
$(this).text($(this).text().substring(0, start)
+ text
+ $(this).text().substring(end));
var range = document.createRange();
range.setStart($(this)[0].firstChild, start + text.length);
range.setEnd($(this)[0].firstChild, start + text.length);
selection.removeAllRanges();
selection.addRange(range);
}
}, false);