關於游標操作,終於搞定了FF下DIV的游標控制

來源:互聯網
上載者:User

什麼都不說了,直接上代碼

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 />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.