限制在 contenteditable 中粘贴(HTML / JS)

2023-11-27

我想阻止用户将不允许的标记粘贴到contenteditable div.

我想将粘贴限制为粗体、斜体、删除线、下划线和链接。

最好的方法是什么(我正在使用jQuery) ?

这不是重复的JQuery 文本编辑器粘贴而不带格式.我不想在没有格式化的情况下粘贴。我想选择/限制某些标记。

我已经阅读了以下问题,但没有一个提供明确的答案:

  • JQuery 文本编辑器粘贴而不带格式
  • 如何过滤用户在 contenteditable div 中粘贴的内容?
  • execCommand 中“粘贴为纯文本”的 JavaScript 技巧
  • 内容可编辑,仅允许纯文本

通过监听可编辑元素的来限制粘贴的内容paste事件。在此事件中,您可以使用正则表达式过滤用户尝试粘贴的数据。

const el = document.querySelector('p');

el.addEventListener('paste', (e) => {
  // Get user's pasted data
  let data = e.clipboardData.getData('text/html') ||
      e.clipboardData.getData('text/plain');
  
  // Filter out everything except simple text and allowable HTML elements
  let regex = /<(?!(\/\s*)?(a|b|i|em|s|strong|u)[>,\s])([^>])*>/g;
  data = data.replace(regex, '');
  
  // Insert the filtered content
  document.execCommand('insertHTML', false, data);

  // Prevent the standard paste behavior
  e.preventDefault();
});
<p contenteditable>Try pasting content into this paragraph. The pasted content can include a <b>BOLD</b>, <i>ITALIC</i>, <s>STRIKE</s>, or <u>UNDERLINE</u>. It can also include a <a href='#'>LINK</a>.</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制在 contenteditable 中粘贴(HTML / JS) 的相关文章