我有一个contenteditable="true"
div。用户可以从各种来源(ctrl C /右键单击)复制/过去文本并粘贴到其中。问题在于,当用户这样做时,格式化的文本被粘贴而不是明文,这是不希望的。我可以简单地调用$("theDiv").html($("theDiv").text())
,但我在div中有一些其他<span>
标记,我想要保留。
一些谷歌搜索告诉我,没有直接的方法从剪贴板数据中提取文本内容(请在此处更正)。另一种方法是清理我的div文章粘贴的内容。让我们举个例子:
粘贴之前(A):
<span class="linkText2">Life</span> <span class="linkText3">is</span> good
粘贴后(B):
<span class="linkText2">Life</span> <span class="linkText3">is <span style="white-space: normal; background-color: rgba(0, 0, 128, 0.0745098);">very</span></span>good
我想要的是(C):
<span class="linkText2">Life</span> <span class="linkText3">is very</span>good
为了实现这一点,该算法将用(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)或类似的东西。有人能指出我正确的方向。正则表达式也可以完成这项工作,但我绝对没时间试用它。
提前致谢