redactor.js PastePlainText - 但需要按钮来粘贴 html

2023-12-09

我们的大多数客户抱怨从 Word 到我们的 redactor.js 富文本编辑器字段的格式设置。我们升级为使用pastePlainText 设置,这似乎效果很好。

然而,有些客户仍然需要将 html 粘贴到富文本框中。我们使用插件在工具栏上添加了一个“粘贴为 html”按钮,但我们无法确定要添加到插件中的代码以将剪贴板内容按原样粘贴到编辑器中。帮助!

我们几乎同样乐意删除pastePlainText选项并在工具栏上有一个“粘贴为纯文本”按钮,但我们也无法弄清楚如何做到这一点。

RedactorPlugins.pasteAsHtml = {
    init: function () {
        this.buttonAdd('pasteAsHtml', 'Paste as HTML', this.testButton);
    },
    testButton: function (buttonName, buttonDOM, buttonObj, e) {
       // What do we do here?
    };

$(".richText").redactor({
    plugins: ['pasteAsHtml'],
    pastePlainText: true
 });

我们现在有一个解决方案。

我们在这里找错了对象:出于安全原因,很难从剪贴板中读取内容。我们假设 redactor.js 有能力做到这一点,但实际上它似乎只有在用户通过 Ctrl+v 或上下文菜单启动粘贴后才从富文本编辑器中读取。这意味着单击按钮来触发“粘贴”并不容易。我相信至少有一个 jquery 插件试图解决这个问题,并且有一系列涉及 Flash 的解决方案,但我们正在寻求更轻量级的修复。

相反,我们做了以下事情。

  1. 设置 redactor 接受 html(即我们没有设置 PastePlainText 选项)。
  2. 使我们的按钮显示一个包含文本区域的模式对话框,用户可以将其 html 内容粘贴到其中。粘贴内容后,我们对其进行处理以去除 html 并保留换行符。

因此,想要保留格式的用户只需粘贴到 RTE 中,想要粘贴为纯文本的用户单击“新建”按钮。这是该插件的代码。

if (!RedactorPlugins) var RedactorPlugins = {};
RedactorPlugins.pasteAsPlainText = {
    init: function () {
        // add a button to the toolbar that calls the showMyModal method when clicked
        this.buttonAdd('pasteAsPlainText', 'Paste as plain text', this.showMyModal);
    },
    // pasteAsPlainText button handler
    showMyModal: function () {
        // add a modal to the DOM
        var $modalHtml = $('<div id="mymodal" style="display:none;"><section><label>Paste content here to remove formatting</label><textarea id="mymodal-textarea" style="width: 100%; height: 150px;"></textarea></section><footer><button class="btn btn-primary" id="mymodal-insert" style="color:#fff;">Insert</button></footer></div>');
        $("body").append($modalHtml);
        // callback executed when modal is shown
        var callback = $.proxy(function () {
            this.selectionSave();
            $('#mymodal-insert')
                .css("width", "100px")
                .click($.proxy(this.insertFromMyModal, this));
            $("#mymodal-textarea").focus();
        }, this);
        // initialize modal with callback
        this.modalInit('Paste as plain text', '#mymodal', 500, callback);
    },
    insertFromMyModal: function (html) {
        this.selectionRestore();
        // remove formatting from the text pasted into the textarea
        html = $('#mymodal-textarea').val();
        var tmp = this.document.createElement('div');
        html = html.replace(/<br>|<\/H[1-6]>|<\/p>|<\/div>/gi, '\n');
        tmp.innerHTML = html;
        html = tmp.textContent || tmp.innerText;
        html = $.trim(html);
        html = html.replace('\n', '<br>');
        html = this.cleanParagraphy(html);
        // insert the text we pulled out of the textarea into the rich text editor
        this.insertHtml(html);
        // close the modal and remove from the DOM
        this.modalClose();
        $("#mymodal").remove();
    }
};

$(".richText").redactor({
    plugins: ['pasteAsPlainText']
});

顺便说一句,如果 Internet Explorer 通过 Ctrl+shift+v 或在 Firefox 和 Chrome 等上下文菜单上提供“粘贴为纯文本”选项,我们就会告诉客户这样做!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redactor.js PastePlainText - 但需要按钮来粘贴 html 的相关文章

随机推荐

  • 如何在 Bash 中对齐表的列?

    我想将文本格式设置为表格 我尝试用一 个回显 t 分隔符 但未对齐 期望的输出 a very long string 112232432 anotherfield a smaller string 123124343 anotherfiel
  • 如何以编程方式触发 UITableViewCell editActions? [复制]

    这个问题在这里已经有答案了 我在我的 tableviewcell 上做了一些自定义编辑操作 当我滑动时它工作正常 但我想知道当我点击单元格时是否有任何方法可以触发这些操作 另外 我看到很多人回答类似的问题只是 tableView setEd
  • 使用 fstream 加载二进制文件

    我正在尝试使用加载二进制文件fstream通过以下方式 include
  • 当 x 轴将刻度线向右移动一位时,散景补丁图上的日期

    我正在尝试调整啤酒厂的例子 http docs bokeh org en latest docs gallery stacked area html 以满足我的需要 我想要的一件事是在 x 轴上显示日期 我做了以下事情 timesteps
  • htaccess 用于 Laravel 的域和子域

    我正在尝试弄清楚如何设置域和子域以在共享托管帐户上工作 这是一个 Laravel 5 1 应用程序 我的访问文件是 Options SymLinksIfOwnerMatch RewriteEngine On RewriteRule inde
  • dotnet 与 Angular cli 对比

    我已经阅读了许多 Angular 2 4 教程 希望能够积累足够的信心来致力于构建一个项目 他们中的大多数使用 Angular cli 来生成入门模板 就在几天前 我偶然发现了一个使用 dotnet cli 解释 NET Core Angu
  • PHP 中 pthread 的问题

    我在 PHP 中遇到 pthreads 问题 当我启动 apache 时 我看到这样的错误 php exe Entry point not found The procedure entry point was not found zend
  • 设置 matplotlib 3D 绘图的刻度颜色

    如果我有一个 3D matplotlib 图 Axes3D对象 如何更改刻度线的颜色 我弄清楚了如何更改轴线 刻度标签和轴标签的颜色 显而易见的解决方案 使用ax tick params axis x colors red 仅更改刻度标签而
  • 将数据从内容可编辑 div 复制到隐藏输入以进行表单提交?

    我想从我的 contenteditable div 中正确复制我的数据 以便我可以将其提交到我的数据库 这将用于类似于 Facebook 的帖子 我的代码如下所示 div class isPlaceholder div 输入一些数据后 ht
  • 外部链接到选项卡、选项卡未更改、Bootstrap 3.3.5

    我的问题与这些问题非常相似 我试图使用链接来更改选项卡 但该链接仅更改选项卡内容 而不更改活动选项卡 最相似 Bootstrap 使用 url 链接到选项卡 非常相似 在 Bootstrap 3 中使用 onclick 显示带有外部链接的选
  • 如何知道android中的音频何时开始播放

    在我的应用程序中 我想在用户启动时获取音乐播放器的开始时间和停止时的结束时间 我不想在我的应用程序中启动任何音乐播放器 我只想跟踪设备中的用户活动 所以我希望我的应用程序在用户开始播放音乐时收到任何通知 我是否对音乐播放器启动和停止有任何意
  • Perl 按散列中的值对散​​列进行排序

    我认为我的想法是正确的 但我搞砸了一些语法 约定 因为我收到错误 全局符号 timeHash需要显式包名称 Code foreach key sort hashValueDescendingNum keys timeHash print t
  • 图像/按钮上的文字

    如何使用 html css 在图像 按钮上制作文本 例如 我有一个按钮 登录按钮 我希望将文本 登录 放置在该按钮上 文本应位于图像 按钮的中心 您可以简单地设置background image相关财产button 或其他元素 如果您使用代
  • 在Java中将字符串转换为双精度型

    我怎样才能转换String例如 12 34 to a double在Java中 您可以使用Double parseDouble 转换一个String to a double String text 12 34 example String
  • window.history.pushState 不会回到历史记录中

    我在尝试 History pushstate 事件时遇到了一些问题 我将其设置为页面的 url 将是通过 AJAX 加载的页面的实际 URL 并且效果很好 我知道它应该自动创建历史记录 加载之前加载的页面 不幸的是 帽子并没有发生 当我点击
  • 密码存储,hash() 与 sha-512 或 crypt() 与河豚 (bcrypt)?

    这是我当前在 PHP SQL 项目中的密码哈希过程 从 dev urandom 中获取 512 位的每用户盐 除了最终哈希值之外 还存储在用户的数据库记录中 从 dev urandom 中取出存储在文件系统中的 512 位 pepper 这
  • 从 $_GET/$_POST 获取信息并将其保存到数据库的做法?

    当涉及到从 get post 获取信息并将信息保存到数据库时 当今的最佳实践是什么 数据是否仍像以前一样进行转义 或者是否还有其他做法 另外 HTMLPurifier 可以用在什么地方呢 我目前正在使用它来过滤富文本 切勿将 GET 中的数
  • 调试 .NET 程序集绑定又名查找使用的 dll 以及原因

    我们在运行时加载的引用 dll 上遇到了一些神秘的版本不匹配问题 错误如 无法加载文件或程序集 X 或其依赖项之一 找到的程序集的清单定义与程序集引用不匹配 HRESULT 异常 0x80131040 有没有办法调试程序集绑定 换句话说 我
  • JQuery 结合 $(document).ready 和 $('DropDown').change 声明

    我想运行一个函数 function myFunction 关于活动 document ready and如果某个下拉菜单发生变化 myDropDown change 有没有一个好的方法来合并这个声明 这样我就不需要两次单独的调用myFunc
  • redactor.js PastePlainText - 但需要按钮来粘贴 html

    我们的大多数客户抱怨从 Word 到我们的 redactor js 富文本编辑器字段的格式设置 我们升级为使用pastePlainText 设置 这似乎效果很好 然而 有些客户仍然需要将 html 粘贴到富文本框中 我们使用插件在工具栏上添