Trong IE11, executeCommand không hoạt động tốt. Tôi sử dụng mã dưới đây cho IE11
<div class="wmd-input" id="wmd-input-md" contenteditable=true>
là hộp div của tôi.
Tôi đọc dữ liệu clipboard từ window.clipboardData và sửa đổi textContent của div và đưa ra dấu mũ.
Tôi đưa ra thời gian chờ để đặt dấu mũ, bởi vì nếu tôi không đặt thời gian chờ, dấu mũ sẽ đi đến cuối div.
và bạn nên đọc clipboardData trong IE11 theo cách dưới đây. Nếu bạn không làm điều đó, ký tự mã vạch mới không được xử lý đúng cách, vì vậy dấu mũ sẽ bị sai.
var tempDiv = document.createElement("div");
tempDiv.textContent = window.clipboardData.getData("text");
var text = tempDiv.textContent;
Đã thử nghiệm trên IE11 và chrome. Nó có thể không hoạt động trên 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);