什麼都不說了,直接上代碼
function getCaretPos(element)<br />{<br /> var CaretPos = 0; // IE Support<br /> if (document.selection) {<br /> element.focus (); //將焦點至於element,並且游標位置不會發生改變<br /> var Sel = document.selection.createRange(); //document.selection可以獲得當前所選地區,而createRange則返回對應的TextRange對象,該對象不包含任何文本<br /> Sel.moveStart ('character', -element.innerText.length); //將游標往後退文本的長度<br /> var text = Sel.text;//Range對象所包括的文本,由於是整個文檔的textRange所以,前面幾個字元有可能不是element中的,所以要做最長相符<br /> for (var i = 0; i < element[element.tagName=='DIV'?'innerText':'value'].length; i++)<br /> {<br /> if (element[element.tagName=='DIV'?'innerText':'value'].substring(0, i + 1) == text.substring(text.length - i - 1, text.length))<br /> {<br /> CaretPos = i + 1;<br /> }<br /> }<br /> var lines = element[element.tagName=='DIV'?'innerText':'value'].substring(0, CaretPos).split('/n').length - 1;<br /> CaretPos -= lines; //range對象中換行一個字元,當時在String中換行是/n兩個字元<br /> }<br /> // Firefox support only for textarea and input<br /> else if (element.selectionStart || element.selectionStart == '0')<br /> CaretPos = element.selectionStart;<br /> // Firefox support only for div<br /> else if (window.getSelection)<br /> {<br /> var sel = window.getSelection();<br /> var rng = sel.getRangeAt(0).cloneRange();<br /> rng.setStart(element, 0);<br /> CaretPos = rng.toString().length;<br /> }<br /> alert(CaretPos);<br />}<br />function setCaretPos(/*DomNode*/ element, /*Number*/ location){<br /> if(element.setSelectionRange)<br /> {<br /> element.focus();<br /> element.setSelectionRange(location,location);<br /> }<br /> else if (document.body.createTextRange) {<br /> var range = document.body.createTextRange();<br /> range.moveToElementText(element);<br /> range.collapse(true);<br /> range.move('character', location);<br /> range.select();<br /> }<br /> else if (window.getSelection)<br /> {<br /> var nodes = [];<br /> var getTextNode = function(node)<br /> {<br /> for (var i = 0; i < node.childNodes.length; i++)<br /> {<br /> if (node.childNodes[i].nodeType == 3)<br /> {<br /> nodes.push(node.childNodes[i]);<br /> }<br /> else<br /> {<br /> getTextNode(node.childNodes[i]);<br /> }<br /> }<br /> }</p><p> getTextNode(element);<br /> var length = 0;<br /> for (var i = 0; i < nodes.length; i++)<br /> {<br /> length += nodes[i].textContent.length;<br /> if (length > location)<br /> {<br /> length -= nodes[i].textContent.length;<br /> break;<br /> }<br /> }<br /> var sel = window.getSelection();<br />sel.collapse(nodes[i], location - length);<br />element.focus();<br /> }<br />}