我有一个带有contenteditable = true
属性的标签 div。当粘贴事件发生时,我想从一些标签中过滤粘贴的 html。我该怎么做?
问问题
64 次
2 回答
2
监听paste
事件并将 分配textContent
给innerHTML
. 由于 的性质textContent
,删除了 HTML 标记,但保留了文本输出。
我们setTimeout
在事件监听器中使用来说明paste
事件处理程序在内容更新之前被触发的事实。
document.querySelector('div').addEventListener('paste', function() {
setTimeout(() => {
this.innerHTML = this.textContent;
}, 0);
})
<div contenteditable="true">
</div>
于 2021-07-06T21:24:46.870 回答
1
您可以只查询div
特定元素。这是一个例子:
const div = document.querySelector('div')
div.addEventListener('paste', e => {
setTimeout(() => {
const elements = getTags('strong');
console.log('@the paste event, tags count: ', elements.length);
}, 0);
});
function getTags(tagName) {
return [...div.querySelectorAll(tagName)];
}
console.log('tags count: ', getTags('strong').length);
<div contenteditable="true" style="border 1px solid black; width: 200px; height: 200px">
<strong>Some </strong><span>thing </span><strong>for </strong><span>testing</span>
</div>
该getTags
函数只查询contenteditable
<div>
具有特定标签名称的元素。默认情况下,我已经<div>
用一些内容填充了它,以显示它在不使用paste
事件的情况下工作。
此外,在paste
事件监听器中,我曾经setTimeout
确保在尝试获取我们感兴趣的元素之前使用新元素更新 DOM。
于 2021-07-06T21:37:31.337 回答