js中,为可编辑div添加表情后如何光标移至最后

JavaScript018

js中,为可编辑div添加表情后如何光标移至最后,第1张

会经常遇到选择后可编辑div中的光标不见了,或者显示的位置不对,现在总结下:

function set_focus()

{

el=document.getElementById('guestbook_editor')

//el=el[0] //jquery 对象转dom对象

el.focus()

if($.support.msie)

{

var range = document.selection.createRange()

this.last = range

range.moveToElementText(el)

range.select()

document.selection.empty()//取消选中

}

else

{

var range = document.createRange()

range.selectNodeContents(el)

range.collapse(false)

var sel = window.getSelection()

sel.removeAllRanges()

sel.addRange(range)

}

}

调用此方法,可以将光标放在可编辑div的最后。

1.给用作富文本编辑的div添加contenteditable属性。

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

2.给表情图片添加click事件(我是把img表情放在li下的),div获取焦点,_insertimg()锁定编辑器中光标的位置,参数是img,也可以是文本。

$("#Modal .emoji-list li").click(function(event) {

var emoji = $(this).find("img").attr('src')

$("#editor").focus()

var source = '<img src="'+emoji+'">'

_insertimg(source)

})

function _insertimg(str){

var selection= window.getSelection ? window.getSelection() : document.selection

var range= selection.createRange ? selection.createRange() : selection.getRangeAt(0)

if (!window.getSelection){

document.getElementById('editor').focus()

var selection= window.getSelection ? window.getSelection() : document.selection

var range= selection.createRange ? selection.createRange() : selection.getRangeAt(0)

range.pasteHTML(str)

range.collapse(false)

range.select()

}

else{

document.getElementById('editor').focus()

range.collapse(false)

var hasR = range.createContextualFragment(str)

var hasR_lastChild = hasR.lastChild

while (hasR_lastChild &&hasR_lastChild.nodeName.toLowerCase() == "br" &&hasR_lastChild.previousSibling &&hasR_lastChild.previousSibling.nodeName.toLowerCase() == "br") {

var e = hasR_lastChild

hasR_lastChild = hasR_lastChild.previousSibling

hasR.removeChild(e)

}

range.insertNode(hasR)

if (hasR_lastChild) {

range.setEndAfter(hasR_lastChild)

range.setStartAfter(hasR_lastChild)

}

selection.removeAllRanges()

selection.addRange(range)

}

}

首先要实现输入内容不同颜色是可以实现的,比如使用一个可编辑iframe就可以了,textarea是不行的。

至于功能的实现,我觉得不需要获取结束位置。

首先检测鼠标事件,如果有点击编辑区的某个位置,你就获取当前鼠标的落点,然后用innerHTML加入一对标签,<span class="color:#XXXXXX"></span>,所有输入内容都在这个span中间。效果就是输入的所有文字都变色。

不知道楼主明白没?