3
A
回答
0
這是我關於這個主題的一個較老的工具。
/**
* @description This operation splits the content of a text area based on its cursor position
* and selection.
* @param targetNode This argument expects the text node to be split.
* @return This operation returns an object containing {first, middle, last}.
*/
var splitTextAreaBySelection = function(targetNode)
{
var target = document.getElementById('Area_'+targetNode.uid);
var response = {};
// IE fails this DOM3 operation. Use IE proprietary code here to recover.
// WARNING: This proprietary IE code has Win32 platform dependency!
if (typeof(target.selectionStart) === "undefined")
{
var content = targetNode.content;
// this captures the area selected text.
var r = document.selection.createRange();
if (r !== null) {
// thankfully the middle is easy to get!
response.middle = r.text;
// now we must create a new text range and mess with it until the cursor position can be discovered.
var re = target.createTextRange();
var rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
var cursorPos = rc.text.length;
// now that we have the cursor position, we can abstract the first and last strings from the content.
response.first = content.substr(0,cursorPos);
response.last = content.substr(cursorPos + response.middle.length);
}
else
{
response.first = content;
}
}
else
{
response.first = target.value.substring(0,target.selectionStart);
response.middle = arget.value.substring(target.selectionStart, target.selectionEnd);
response.last = target.value.substring(target.selectionEnd, target.textLength);
}
return response;
};
+0
好吧,我的可信元素是iframe(rte)的主體。不幸的是,這段代碼沒有字 – Thariama 2012-02-22 08:35:46
1
我找到了解決我的問題的方法,但只有在所有行的行高都相同的情況下才有效。這個想法是在插入符號位置插入一個虛擬元素,計算相對於body start的位置,然後將該值除以行高。 結果是行號的插入符是
這裏是一些代碼開始使用。
// get lineheight, eighter line-height or min-height
var $elem = $(ed.getBody().firstElementChild);
var lineHeight = parseInt($elem.css('line-height'), 10) || parseInt($elem.css('min-height'), 10);
var rng = ed.selection.getRng();
rng.collapse(true);
var bm = ed.selection.getBookmark();
var $marker = $(ed.getBody()).find('#'+bm.id);
var elem = ed.getDoc().getElementById(bm.id+'_start');
try {
box = elem.getBoundingClientRect();
}
catch(e){}
var doc = ed.getDoc(),
docElem = doc.documentElement,
body = ed.getBody(),
win = ed.getWin(),
clientTop = docElem.clientTop || body.clientTop || 0,
clientLeft = docElem.clientLeft || body.clientLeft || 0,
scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
top = box.top + scrollTop - clientTop,
left = box.left + scrollLeft - clientLeft;
// set Bookmark
ed.selection.moveToBookmark(bm);
var caret_line = Math.floor((top)/lineHeight) + 1;
+0
感謝分享! – 2013-12-18 16:29:43
相關問題
- 1. 我怎樣才能得到一個CONTENTEDITABLE <button>
- 2. 我怎樣才能得到每個sap.m.select元素的行值
- 3. 我怎樣才能得到一個TD
- 4. 我怎樣才能得到一個HTML元素的屬性在JavaScript/jQuery的
- 5. 我怎樣才能得到一個PortletRequest
- 6. 我怎樣才能得到一個RejectedExecutionException
- 7. 我怎樣才能得到
- 8. 我怎樣才能得到JSON格式的遊標輸出?
- 9. 我怎樣才能找到元素
- 10. 我怎樣才能得到
- 11. CSS:我怎樣才能得到2個元素浮動底部
- 12. 我怎樣才能得到一個適當的素描照片?
- 13. 我怎樣才能使一個span元素在該行的PHP
- 14. 我怎樣才能得到這些值
- 15. 我怎樣才能得到一個對象的座標?
- 16. 我怎樣才能得到watir中隱藏元素的文字
- 17. 我怎樣才能得到HTML標記的直接父
- 18. 我怎樣才能拖動一個標記,並得到lon/lat
- 19. 我怎樣才能得到一個選擇NSTreeController對象
- 20. 我怎樣才能得到HTML圖像標籤android?
- 21. 我怎樣才能獲得一個字符的unicode號碼?
- 22. jquery:我怎樣才能複製元素?
- 23. 我怎樣才能得到JSON fton WebSQL
- 24. 我怎樣才能得到一個JSON像這樣用JavaScript
- 25. 我怎樣才能得到android
- 26. 我怎樣才能看到每一行?
- 27. 我怎樣才能得到Queryable.Join的MethodInfo
- 28. 我怎樣才能得到的數字
- 29. 我怎樣才能得到在Android的
- 30. 我怎樣才能得到textarea中的行號的當前光標位置?
請添加例如HTML'
可能重複[如何得到光標位置textarea?](http://stackoverflow.com/questions/263743/how-to-get-cursor-position-in-textarea) – FishBasketGordo 2012-02-21 17:57:19
請問一個新的問題,而不是重大改變上下文。 – Bergi 2012-02-21 18:03:47