rendered paste body(function($) { $.fn.previewTextareas = function() { var $el = this; var run = function(){ var textareas = $('textarea', $el); textareas.each(initializeTextarea); }; var initializeTextarea = function(i, textarea) { textarea = $(textarea); attachPreviewToTextarea(textarea); updatePreview(textarea); bindEvents(textarea); }; var attachPreviewToTextarea = function(textarea) { var preview = getPreviewTemplate(); preview.insertAfter(textarea); textarea.data('preview', preview); }; var updatePreview = function(textarea) { var value = textarea.val(); var preview = textarea.data('preview'); preview.html(value); }; var bindEvents = function(textarea) { textarea .change(onEventUpdatePreview) .keydown(onEventUpdatePreview) .keypress(onEventUpdatePreview) .keyup(onEventUpdatePreview) .bind('cut paste textInput input', onEventUpdatePreview); }; var onEventUpdatePreview = function(event){ updatePreview($(event.target)); }; var getPreviewTemplate = function() { return $('<p></p>'); }; run(); return this; }})(jQuery);