【问题标题】:Remove Background Color From Pasted Text WYSIWYG从粘贴的文本中删除背景颜色所见即所得
【发布时间】:2020-02-10 05:52:11
【问题描述】:

我目前正在开发 WYSIWYG 文本编辑器,但在处理一个元素时遇到了一些问题。每当我从网站复制和粘贴文本时,它也会粘贴背景颜色。我希望它在粘贴文本时删除背景颜色。

目前我有一个可以编辑的 div:

<div id="editor" class="comment-section" contenteditable="true" spellcheck="false" tabindex="0"></div>

然后使用 jQuery 我试图删除 div 中所有子项的背景颜色,因为当我粘贴文本时它会向 div 添加一个跨度:

$('#editor').on('paste', function(e) {
    $(this).children().attr('background-color', 'transparent');
});

但这似乎将之前粘贴的文本的背景颜色设置为透明,但实际上并没有删除背景。

【问题讨论】:

  • 你为什么不阻止默认粘贴行为并自己附加文本内容,我认为应该可以。

标签: javascript jquery html css wysiwyg


【解决方案1】:

类似于这里的第二个解决方案:JavaScript get clipboard data on paste event (Cross browser)

$('#editor').on('paste', function(e) {
    let  pastedData, text;
    // Stop data actually being pasted into div
    e.stopPropagation();
    e.preventDefault();
    // Get pasted data via clipboard API
    pastedData = e.originalEvent.clipboardData || window.clipboardData;
    pastedData = pastedData.getData('Text');
    text = $(this).text();
    console.log(text, pastedData);
    $(this).text(text+pastedData);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="editor" class="comment-section" contenteditable="true" spellcheck="false" tabindex="0"></div>

【讨论】:

  • 这可行,但它将光标放在文本的开头而不是结尾,如果我在文本框中添加新行或留出空格,它会删除它
  • 对于光标:stackoverflow.com/questions/2871081/… 添加新行或创建空格时我没有遇到同样的问题,它工作正常。 @TheWelshManc
  • 我不知道为什么会导致这个问题,我有其他脚本在页面上工作,但是当我使用粘贴功能时它们都没有被调用。我还删除了所有其他脚本,它仍然可以这样做。
  • 设法通过使用document.execCommand('inserttext', false, pastedData); 而不是$(this).text(text+pastedData); 使其正常工作。
  • 太棒了! @TheWelshManc 我无法真正复制在线编辑器中的错误,否则我会帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2011-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多