JS在可编辑的div中的光标位置插入内容的方法
JS在可编辑的div中的光标位置插入内容的方法
发布时间:2016-12-30 来源:查字典编辑
摘要:本文实例讲述了js实现在可编辑div中指定位置插入内容的方法,就像我们使用的编辑器一样,分享给大家供大家参考。具体实现方法如下:首先要让DI...

本文实例讲述了js实现在可编辑div中指定位置插入内容的方法,就像我们使用的编辑器一样,分享给大家供大家参考。具体实现方法如下:

首先要让DIV启用编辑模式

复制代码 代码如下:<div contenteditable=true id="divTest"></div>

通过设定contenteditable=true开启div的编辑模式.这样DIV就可以跟文本框一样输入内容了。

不扯话题了。下面说怎么获取或设置光标位置.

2个步骤:

① 获取DIV中的光标位置

② 改变光标位置

复制代码 代码如下:var cursor = 0; // 光标位置

document.onselectionchange = function () {

var range = document.selection.createRange();

var srcele = range.parentElement();//获取到当前元素

var copy = document.body.createTextRange();

copy.moveToElementText(srcele);

for (cursor = 0; copy.compareEndPoints("StartToStart", range) < 0; cursor++) {

copy.moveStart("character", 1);//改变光标位置,实际上我们是在记录cursor的数量.

}

}

给document绑定光标变化事件。用来记录光标位置.

这样就可以拿到DIV的光标位置了.

复制代码 代码如下:function moveEnd(obj) {

lyTXT1.focus();

var r = document.selection.createRange();

//因为这里死从当前光标开始移动的(好像文本框的是从0算起.)所以我们需要拿到当前光标位置,然后就可以计算出要移动多少位了,这样就可以把光标移动到想要的位置了

r.moveStart('character', lyTXT1.innerText.length - cursor);

r.collapse(true);

r.select();

}

通过上面的我们就可以将DIV中的光标移动到最后面了

一个完整的实例

复制代码 代码如下:<button type="button">插入字符</button>

<div contentEditable="true" id="test"></div>

function insertHtmlAtCaret(html) {

var sel, range;

if (window.getSelection) {

// IE9 and non-IE

sel = window.getSelection();

if (sel.getRangeAt && sel.rangeCount) {

range = sel.getRangeAt(0);

range.deleteContents();

// Range.createContextualFragment() would be useful here but is

// non-standard and not supported in all browsers (IE9, for one)

var el = document.createElement("div");

el.innerHTML = html;

var frag = document.createDocumentFragment(), node, lastNode;

while ( (node = el.firstChild) ) {

lastNode = frag.appendChild(node);

}

range.insertNode(frag);

// Preserve the selection

if (lastNode) {

range = range.cloneRange();

range.setStartAfter(lastNode);

range.collapse(true);

sel.removeAllRanges();

sel.addRange(range);

}

}

} else if (document.selection && document.selection.type != "Control") {

// IE < 9

document.selection.createRange().pasteHTML(html);

}

}

再看一个基于jquery的实例

复制代码 代码如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

<script type="text/javascript" src="http://ajax.googleapis.com/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 (window.getSelection && window.getSelection().getRangeAt) {

range = window.getSelection().getRangeAt(0);

range.collapse(false);

node = range.createContextualFragment(text);

var c = node.lastChild;

range.insertNode(node);

if(c){

range.setEndAfter(c);

range.setStartAfter(c)

}

var j = window.getSelection();

j.removeAllRanges();

j.addRange(range);

} else if (document.selection && document.selection.createRange) {

document.selection.createRange().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"><br></div>

<a href="javascript:void(0)" id="button">按钮</a>

<ul>

<li>(笑)</li>

<li>(哭)</li>

<li>(乐)</li>

</ul>

</body>

</html>

希望本文所述对大家的javascript程序设计有所帮助。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类