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