1

我有一个contenteditable="true"div 。用户可以从各种来源复制/粘贴文本(ctrl C / 鼠标右键单击)并粘贴到其中。问题是,当用户这样做时,会粘贴格式化文本而不是纯文本,这是不可取的。我本可以简单地调用$("theDiv").html($("theDiv").text()),但我在 div 中还有一些其他<span>标签要保留。

一些谷歌搜索告诉我,没有直接的方法可以从剪贴板数据中提取文本内容(请在此处纠正我)。然后,另一种方法是清理我的 div 粘贴后的内容。让我们举个例子:

粘贴前 (A):

<span class="linkText2">Life</span>&nbsp;<span class="linkText3">is</span>&nbsp;good&nbsp;

粘贴后(B):

<span class="linkText2">Life</span>&nbsp;<span class="linkText3">is&nbsp;<span style="white-space: normal; background-color: rgba(0, 0, 128, 0.0745098);">very</span></span>good&nbsp;

我想要的是(C):

<span class="linkText2">Life</span>&nbsp;<span class="linkText3">is&nbsp;very</span>good&nbsp;

<span class="linkText[0-9]+">为了实现这一点,算法是用它的明文值替换由 (B) 构建的 DOM 树中除了 a 之外的所有元素。

我尝试了以下方法:

$.each($.parseHTML($("#theDiv").html()), function(index, value) {
  console.log(index +':'+value);
});

这给了我 Chrome 调试器中的输出:

0:[object HTMLSpanElement]
1:[object Text]
2:[object HTMLSpanElement]
3:[object Text]
4:[object HTMLSpanElement]

遍历这个数组可能没问题,但它不是 jQuery 类型的解决方案,而且看起来比我想象的要复杂。我以某种方式尝试使用 .replaceWith(newContent) 或类似的。有人可以指出我正确的方向。正则表达式也可以完成这项工作,但我非常缺乏时间来尝试它。

提前致谢

4

0 回答 0