我有一个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
<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) 或类似的。有人可以指出我正确的方向。正则表达式也可以完成这项工作,但我非常缺乏时间来尝试它。
提前致谢