Я действительно проделал большую работу над этим и только что написал хороший пост в блоге , в котором подробно описывается, как мы делали это на Lucidchart (в качестве заявления об отказе от ответственности, я работаю на Lucidchart). У нас есть JSFiddle , который показывает копирование и вставку (протестировано в Firefox, Safari, Chrome и IE9 +).
Суть ответа в том, что вам нужно будет получить HTML во время события системной вставки. В большинстве браузеров (не IE) это можно сделать с помощью чего-то простого:
document.addEventListener('paste', function(e) {
var html = e.clipboardData.getData('text/html');
// Whatever you want to do with the html
}
Проблема в том, когда вы хотите получить HTML в IE. По какой-то причине IE не делает доступными данные буфера обмена text / html через javascript. Что вам нужно сделать, это позволить браузеру вставить в contenteditable div и затем получить html после того, как событие вставки закончится.
<div id="ie-clipboard-contenteditable" class="hidden" contenteditable="true"></div>
var ieClipboardDiv = $('#ie-clipboard-contenteditable');
var focusIeClipboardDiv = function() {
ieClipboardDiv.focus();
var range = document.createRange();
range.selectNodeContents((ieClipboardDiv.get(0)));
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
};
document.addEventListener('beforepaste', function() {
if (hiddenInput.is(':focus')) {
focusIeClipboardDiv();
}
}, true);
document.addEventListener('paste', function(e) {
ieClipboardDiv.empty();
setTimeout(function() {
var html = ieClipboardDiv.html();
// Do whatever you want with the html
ieClipboardDiv.empty();
// Return focus here
}, 0);
}