【发布时间】:2015-05-17 07:46:41
【问题描述】:
摘要/背景
我正在尝试制作一个内容可编辑的 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 的末尾。通常,当我们在原始文本的中间粘贴一个 sn-p 单词时,插入符号会跳转到粘贴单词的末尾,而不是整个文本的末尾。但是在这种情况下我不知道为什么它会自动跳转到整个文本的末尾。
第二个问题是 setInterval 函数。也许不会造成任何问题,但是脚本编写的方式非常不专业,可能会影响程序的效率。
问题
- 在原文中间粘贴HTML文字后,如何防止插入符跳转到contenteditable div中整个文本的末尾?
- 如何在不使用 setInterval 函数的情况下优化脚本?
【问题讨论】:
标签: javascript jquery html contenteditable