Я использую это:
$(body_doc).find('body').bind('paste',function(e){
var rte = $(this);
_activeRTEData = $(rte).html();
beginLen = $.trim($(rte).html()).length;
setTimeout(function(){
var text = $(rte).html();
var newLen = $.trim(text).length;
//identify the first char that changed to determine caret location
caret = 0;
for(i=0;i < newLen; i++){
if(_activeRTEData[i] != text[i]){
caret = i-1;
break;
}
}
var origText = text.slice(0,caret);
var newText = text.slice(caret, newLen - beginLen + caret + 4);
var tailText = text.slice(newLen - beginLen + caret + 4, newLen);
var newText = newText.replace(/(.*(?:endif-->))|([ ]?<[^>]*>[ ]?)|( )|([^}]*})/g,'');
newText = newText.replace(/[·]/g,'');
$(rte).html(origText + newText + tailText);
$(rte).contents().last().focus();
},100);
});
body_doc - это редактируемый iframe. Если вы используете редактируемый div, вы можете удалить часть .find ('body'). В основном он обнаруживает событие вставки, проверяет местоположение, очищает новый текст и затем помещает очищенный текст туда, где он был вставлен. (Звучит сбивчиво с толку ... но на самом деле это не так плохо, как кажется.
setTimeout необходим, потому что вы не можете захватить текст, пока он фактически не вставлен в элемент, события вставки запускаются, как только начинается вставка.