概述/背景
我正在尝试创建一个可编辑的 div,当它被粘贴 HTML 代码时,希望它能自动转换为纯文本,并且光标能够自动跳到粘贴的 HTML 代码的末尾。
我的尝试
我已经尝试过制作它了,以下是我编写的代码。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
function stripHTML(input){
var output = '';
if(typeof(input) == "string"){
output = input.replace(/(<([^>]+)>)/ig, "");
}
return output;
}
$(function(){
$("#text").focus(function(event){
setItv = setInterval('clearHTML()', 1);
});
$("#text").blur(function(event){
clearInterval(setItv);
});
});
function clearHTML(){
var patt = /(<([^>]+)>)/ig;
var input = $("#text").html();
if(input.search(patt) >= 0){
var output = '';
if(typeof(input) == "string"){
output = stripHTML(input);
}
$("#text").html(output);
}
}
</script>
<div contenteditable="true" style="border: 1px #000 solid; width: 300px;
height: 100px;" id="text">Hello, world!</div>
</body>
</html>
问题
最大的问题是光标位置。在将HTML粘贴在原始文本中间(例如,在“Hello”和“world”之间粘贴)之后,插入符会跳到整个文本的末尾,而不是粘贴的HTML的末尾。通常,当我们在原始文本的中间粘贴一小段单词时,插入符会跳到粘贴的单词的末尾,而不是整个文本的末尾。但在这种情况下,我不知道为什么它会自动跳到整个文本的末尾。
次要问题是setInterval函数。也许它不会引起任何问题,但脚本的方式非常不专业,可能会影响程序的效率。
问题
- 如何防止在contenteditable div中将HTML单词粘贴在原始文本的中间后插入符跳到整个文本的末尾?
- 如何优化编写脚本,而不使用setInterval函数?
<img>
元素以外的元素,我会递归执行这个操作。否则,方法是一样的。 - Tim DownsetTimeout()
,因为它会在实际发生粘贴之前触发。 - Tim Down<br>
标签的HTML单词后,插入符跳到粘贴单词的最后2个字符。 - Banana Code