操作html格式的文本以粘贴没有格式的剪贴板数据

时间:2013-07-15 04:02:28

标签: jquery html

我有一个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;

为了实现这一点,该算法将用(B)构造的DOM树中的所有元素替换为明文值为<span class="linkText[0-9]+">的任何元素。

我尝试了以下内容:

$.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)或类似的东西。有人能指出我正确的方向。正则表达式也可以完成这项工作,但我绝对没时间试用它。

提前致谢

0 个答案:

没有答案