JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法
來源:易賢網(wǎng) 閱讀:5639 次 日期:2014-12-19 14:27:50
溫馨提示:易賢網(wǎng)小編為您整理了“JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法”,方便廣大網(wǎng)友查閱!

首先要讓DIV啟用編輯模式

代碼如下:

<div contenteditable=true id="divTest"></div>

通過設(shè)定contenteditable=true開啟div的編輯模式.這樣DIV就可以跟文本框一樣輸入內(nèi)容了。

不扯話題了。下面說怎么獲取或設(shè)置光標(biāo)位置.

2個(gè)步驟:

① 獲取DIV中的光標(biāo)位置

② 改變光標(biāo)位置

代碼如下:

var cursor = 0; // 光標(biāo)位置

document.onselectionchange = function () {

var range = document.selection.createRange();

var srcele = range.parentElement();//獲取到當(dāng)前元素

var copy = document.body.createTextRange();

copy.moveToElementText(srcele);

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

copy.moveStart("character", 1);//改變光標(biāo)位置,實(shí)際上我們是在記錄cursor的數(shù)量.

}

}

給document綁定光標(biāo)變化事件。用來記錄光標(biāo)位置.

這樣就可以拿到DIV的光標(biāo)位置了.

代碼如下:

function moveEnd(obj) {

lyTXT1.focus();

var r = document.selection.createRange();

//因?yàn)檫@里死從當(dāng)前光標(biāo)開始移動(dòng)的(好像文本框的是從0算起.)所以我們需要拿到當(dāng)前光標(biāo)位置,然后就可以計(jì)算出要移動(dòng)多少位了,這樣就可以把光標(biāo)移動(dòng)到想要的位置了

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

r.collapse(true);

r.select();

}

通過上面的我們就可以將DIV中的光標(biāo)移動(dòng)到最后面了

一個(gè)完整的實(shí)例

復(fù)制代碼 代碼如下:

<button type="button" onclick="document.getElementById('test').focus(); insertHtmlAtCaret('<b>INSERTED</b>');">插入字符</button>

<div contentEditable="true" style="height:50px; border:2px solid red;" 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);

}

}

再看一個(gè)基于jquery的實(shí)例

代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="">

<head>

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

<script type="text/javascript" src=">

<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" 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>

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)