Che*_*hev 61 html javascript jquery textarea input
我有一个textarea,我想知道如果我在textarea的最后一行或textarea的第一行用我的光标用JavaScript.
我想到抓住第一个换行符和最后一个换行符的位置,然后抓住光标的位置.
var firstNewline = $('#myTextarea').val().indexOf('\n');
var lastNewline = $('#myTextarea').val().lastIndexOf('\n');
var cursorPosition = ?????;
if (cursorPosition < firstNewline)
// I am on first line.
else if (cursorPosition > lastNewline)
// I am on last line.
Run Code Online (Sandbox Code Playgroud)
除非JavaScript简单或简单,否则首选jQuery解决方案.
pim*_*vdb 75
如果没有选择,您可以使用属性.selectionStart或.selectionEnd(没有选择它们是相同的).
var cursorPosition = $('#myTextarea').prop("selectionStart");
Run Code Online (Sandbox Code Playgroud)
请注意,旧版浏览器不支持此功能,最明显的是IE8-.在那里你将不得不使用文本范围,但这是一个完全的沮丧.
我相信有一个库可以用来获取和设置输入元素中的选择/光标位置.我记不起它的名字,但似乎有很多关于这个主题的文章.
Tim*_*own 19
我已经做了相当多的工作,并发布了一个函数,用于在Stack Overflow上的textareas中多次获取插入/选择位置.与其他几乎所有其他代码不同,它可以正常使用IE <9中的换行符.
这是一个背景的示例问题:
是否有Internet Explorer批准的selectionStart和selectionEnd的替代品?
这里是我编写的jQuery插件的链接,其中包含此函数和其他与选择相关的textarea函数:
https://github.com/timdown/rangyinputs
gil*_*ly3 18
这是我在标准库中的跨浏览器功能:
function getCursorPos(input) {
if ("selectionStart" in input && document.activeElement == input) {
return {
start: input.selectionStart,
end: input.selectionEnd
};
}
else if (input.createTextRange) {
var sel = document.selection.createRange();
if (sel.parentElement() === input) {
var rng = input.createTextRange();
rng.moveToBookmark(sel.getBookmark());
for (var len = 0;
rng.compareEndPoints("EndToStart", rng) > 0;
rng.moveEnd("character", -1)) {
len++;
}
rng.setEndPoint("StartToStart", input.createTextRange());
for (var pos = { start: 0, end: len };
rng.compareEndPoints("EndToStart", rng) > 0;
rng.moveEnd("character", -1)) {
pos.start++;
pos.end++;
}
return pos;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中使用它,如下所示:
var cursorPosition = getCursorPos($('#myTextarea')[0])
Run Code Online (Sandbox Code Playgroud)
这是它的补充功能:
function setCursorPos(input, start, end) {
if (arguments.length < 3) end = start;
if ("selectionStart" in input) {
setTimeout(function() {
input.selectionStart = start;
input.selectionEnd = end;
}, 1);
}
else if (input.createTextRange) {
var rng = input.createTextRange();
rng.moveStart("character", start);
rng.collapse();
rng.moveEnd("character", end - start);
rng.select();
}
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/gilly3/6SUN8/
这是获取行号和列位置的代码
function getLineNumber(tArea) {
return tArea.value.substr(0, tArea.selectionStart).split("\n").length;
}
function getCursorPos() {
var me = $("textarea[name='documenttext']")[0];
var el = $(me).get(0);
var pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
var ret = pos - prevLine(me);
alert(ret);
return ret;
}
function prevLine(me) {
var lineArr = me.value.substr(0, me.selectionStart).split("\n");
var numChars = 0;
for (var i = 0; i < lineArr.length-1; i++) {
numChars += lineArr[i].length+1;
}
return numChars;
}
Run Code Online (Sandbox Code Playgroud)
tArea 是文本区域 DOM 元素
| 归档时间: |
|
| 查看次数: |
109397 次 |
| 最近记录: |