首頁 >web前端 >js教程 >JS在可編輯的div中的遊標位置插入內容的方法_javascript技巧

JS在可編輯的div中的遊標位置插入內容的方法_javascript技巧

WBOY
WBOY原創
2016-05-16 16:30:552679瀏覽

本文實例講述了js實作在可編輯div中指定位置插入內容的方法,就像我們使用的編輯器一樣,分享給大家供大家參考。具體實作方法如下:

首先要讓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)  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中的遊標移到最後面了
一個完整的實例
複製程式碼


程式碼如下:


 

 
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 document.selection.createRange().pasteHTML(html);

}
}

複製程式碼 程式碼如下:





內容可編輯標題>

*{
 邊距:0;填充:0;
}
.im-訊息區{
 寬度:98%;
 內邊距:2px;
 高度:75px;
 邊框:#000 實心 1px;
 背景:#fff;
 字體:12px/20px arial,"5b8b4f53";
 自動換行:斷詞;
 溢位-y:自動;
 行高:1;
}
.ul{顯示:無;}
.ul li{
 背景顏色:#CCC;
 寬度:50px;
}
風格>

函數 inimage(text){
 var obj= $(".im-message-area")[0];
 var 範圍,節點;
 if(!obj.hasfocus) {
  obj.focus();
 }
    if (window.getSelection && window.getSelection().getRangeAt) {
        range = window.getSelection().getRangeAt(0);
  range.collapse(false);
        節點 = range.createContextualFragment(text);
  var c = node.lastChild;
        range.insertNode(節點);
  如果(c){
   range.setEndAfter(c);
   range.setStartAfter(c)
  }
  var j = window.getSelection();
  j.removeAllRanges();
  j.addRange(範圍);
 
    } else if (document.selection && document.selection.createRange) {
        document.selection.createRange().pasteHTML(text);
    }
}
$(文檔).ready(function(){
 $('#button').click(function(){
  $('.ul').show();
 })
 $('.ul li').each(function(){
  $(this).click(function(){
   inimage($(this).text());
  })
 })
});
腳本>
頭>

 


 按鈕
 

     
  • (笑)

  •  
  • (哭)

  •  
  • (樂)

  •  

身體>

希望本文對大家介紹的javascript程式設計有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn