【问题标题】:Is it possible to reset the style of content only for copying?是否可以仅为复制重置内容样式?
【发布时间】:2012-01-03 17:07:58
【问题描述】:

有人要求我修复网站上的一些错误,其中一个让我陷入了困境。由于此特定站点的样式布局,当用户从指定区域选择并复制文本时,他们会复制富文本数据,如果将其粘贴到富文本编辑器中,则会在黑色背景的 blob 上生成大的黑色文本。

理想情况下,我想剥离所有样式数据,或者以某种方式启用对特定数据集的纯文本复制。

这可能吗?还是我必须求助于像 what GitHub uses for Git URLs 这样的 Flash 小程序?

【问题讨论】:

标签: html css


【解决方案1】:

如果您对使用 JavaScript 解决问题感到满意,您可以在要重新设置样式的元素上捕获“oncopy”事件(归功于 @FirstZero),然后使用 JavaScript 重新设置元素的样式,然后再重新设置样式超时。

如果你可以使用 jQuery,你可以使用类似下面的 JavaScript:

$('p').bind(
    'copy',
    function(e) {
        var copyElem= $(e.target);
        var defaultColor = copyElem.css('color');
        copyElem.css('color', 'pink'); // Change the color to pink for copy
        window.setTimeout(
            function() {copyElem.css('color', defaultColor);}, // Change it back
            1
        );
    }
);

(Try it out in jsFiddle)

请注意,如果存在 onaftercopy 事件,这会更整洁,但不幸的是似乎没有。

我只在 Chrome 中测试了上述解决方案,但它应该可以在 Firefox(自 3.0 起)、最新版本的 Chrome 和 Safari 以及 Internet Explorer 中运行。它可能在 Opera 中工作。

【讨论】:

    【解决方案2】:

    许多年前,我制作了一个自定义表单,它复制了视频游戏中菜单的外观。当时,Firefox 不允许许多表单 UI 小部件(Firefox 2.something?)使用 CSS 设置样式。显然在过去的几年里发生了变化。

    我最终解决这个问题的方法是创建一个非常大的输入文本框,其中包含通过 value="" 属性传入的内容。 (

    它也相当简单,绝对不需要 JS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-02
      • 2016-06-10
      • 2014-11-08
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多