JS在可编辑的div中的光标位置插⼊内容的⽅法
本⽂实例讲述了js实现在可编辑div中指定位置插⼊内容的⽅法,就像我们使⽤的编辑器⼀样,分享给⼤家供⼤家参考。具体实现⽅法如下:
⾸先要让DIV启⽤编辑模式
复制代码代码如下:
<div contenteditable=true id="divTest"></div>
通过设定contenteditable=true开启div的编辑模式.这样DIV就可以跟⽂本框⼀样输⼊内容了。
不扯话题了。下⾯说怎么获取或设置光标位置.
2个步骤:
①获取DIV中的光标位置
②改变光标位置
复制代码代码如下:
var cursor = 0; // 光标位置
var range = ateRange();
var srcele = range.parentElement();//获取到当前元素
var copy = ateTextRange();
for (cursor = 0; copypareEndPoints("StartToStart", range) < 0; cursor++) {
}
}
给document绑定光标变化事件。⽤来记录光标位置.
这样就可以拿到DIV的光标位置了.
复制代码代码如下:
function moveEnd(obj) {
lyTXT1.focus();
var r = ateRange();
//因为这⾥死从当前光标开始移动的(好像⽂本框的是从0算起.)所以我们需要拿到当前光标位置,然后就可以计算出要移动多少位了,这样就可以把光标移动到想要的位置了
r.select();
}
通过上⾯的我们就可以将DIV中的光标移动到最后⾯了
⼀个完整的实例
复制代码代码如下:
<button type="button" onclick="ElementById('test').focus(); insertHtmlAtCaret('<b>INSERTED</b>');">插⼊字符</button>
<div contentEditable="true" id="test"> </div>
function insertHtmlAtCaret(html) {
var sel, range;
if (Selection) {
// IE9 and non-IE
sel = Selection();
if (RangeAt && sel.rangeCount) {
range = RangeAt(0);
range.deleteContents();
// ateContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
var el = ateElement("div");
el.innerHTML = html;
var frag = ateDocumentFragment(), node, lastNode;
while ( (node = el.firstChild) ) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
sel.addRange(range);
}
}
} else if (document.selection && pe != "Control") {
// IE < 9
ateRange().pasteHTML(html);
}
}
再看⼀个基于jquery的实例
复制代码代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<script type="text/javascript" src="leapis/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<title>contenteditable</title>
<style>
*{
margin:0;padding:0;
}
.im-message-area{
width:98%;
padding:2px;
height:75px;
border:#000 solid 1px;
background:#fff;
font:12px/20px arial,"5b8b4f53";
word-wrap:break-word;
overflow-y:auto;
line-height:1;
}
.ul{display:none;}
.ul li{
background-color:#CCC;
width:50px;
}
</style>
<script language="javascript" type="text/javascript">
function inimage(text){
var obj= $(".im-message-area")[0];
var range, node;
if(!obj.hasfocus) {
obj.focus();
}
if (Selection && Selection().getRangeAt) {
jquery修改html内容
range = Selection().getRangeAt(0);
node = ateContextualFragment(text);
var c = node.lastChild;
range.insertNode(node);
if(c){
range.setEndAfter(c);
range.setStartAfter(c)
}
var j = Selection();
j.addRange(range);
} else if (document.selection && ateRange) {
ateRange().pasteHTML(text);
}
}
$(document).ready(function(){
$('#button').click(function(){
$('.ul').show();
})
$('.ul li').each(function(){
$(this).click(function(){
inimage($(this).text());
})
})
});
</script>
</head>
<body>
<div contenteditable="true" id="im_message_area" class="im-message-area"><br></div> <a href="javascript:void(0)" id="button">按钮</a>
<ul class="ul">
<li>(笑)</li>
<li>(哭)</li>
<li>(乐)</li>
</ul>
</body>
</html>
希望本⽂所述对⼤家的javascript程序设计有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。