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. 我怎样才能得到
- 6. 我怎样才能得到JSON格式的游标输出?
- 7. 我怎样才能得到一个适当的素描照片?
- 8. 我怎样才能得到watir中隐藏元素的文字
- 9. 我怎样才能得到HTML图像标签android?
- 10. 我怎样才能得到一个JSON像这样用JavaScript
- 11. 我怎样才能得到android
- 12. 我怎样才能看到每一行?
- 13. 我怎样才能在一个XML Schema
- 14. 我怎样才能得到statechange
- 15. C#:我怎样才能得到某个文件的图标?
- 16. 我怎样才能找到一个DataTable
- 17. 我怎样才能找到这个元素与硒webdriver?
- 18. 我怎样才能得到父组件
- 19. 我怎样才能得到Parsley.js
- 20. 我怎样才能得到djangocms
- 21. 我怎样才能得到屏幕-Android
- 22. 我怎样才能得到NSScrollView尊重
- 23. 我怎样才能得到用户
- 24. 我怎样才能得到一个名为的MessagingService类的Java
- 25. 我怎样才能让这只有一个元素?
- 26. 我怎样才能从一个deque中弹出()很多元素?
- 27. 我怎样才能给JavaScript元素一个CSS类?
- 28. jquery:我怎样才能让一个数字元素可折叠?
- 29. 我怎样才能得到这个标题
- 30. 我怎样才能标签
请添加例如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