IE11'de execCommand pek iyi çalışmıyor. IE11 için aşağıdaki kodu kullanıyorum <div class="wmd-input" id="wmd-input-md" contenteditable=true>
benim div kutum
.
Pano verilerini window.clipboardData'dan okudum ve div'in textContent öğesini değiştirip düzeltme işareti veriyorum.
İmleci ayarlamak için zaman aşımı veriyorum, çünkü zaman aşımını ayarlamazsam, düzeltme işareti div'in sonuna gider.
ve aşağıdaki şekilde IE11'deki clipboardData'yı okumalısınız. Bunu yapmazsanız, satırsonu karakteri düzgün işlenmez, bu nedenle düzeltme yanlış olur.
var tempDiv = document.createElement("div");
tempDiv.textContent = window.clipboardData.getData("text");
var text = tempDiv.textContent;
IE11 ve chrome üzerinde test edilmiştir. IE9'da çalışmayabilir
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);