回答
下面将在所有主要浏览器的工作文字<input>
内容,见jsFiddle。它不应该用于<textarea>
元素,因为getInputSelection
函数不会在IE中正确计算换行符。请参阅this answer了解将执行此操作的(更长)功能。
function getInputSelection(input) {
var start = 0, end = 0;
input.focus();
if ( typeof input.selectionStart == "number" &&
typeof input.selectionEnd == "number") {
start = input.selectionStart;
end = input.selectionEnd;
} else if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
if (range) {
var inputRange = input.createTextRange();
var workingRange = inputRange.duplicate();
var bookmark = range.getBookmark();
inputRange.moveToBookmark(bookmark);
workingRange.setEndPoint("EndToEnd", inputRange);
end = workingRange.text.length;
workingRange.setEndPoint("EndToStart", inputRange);
start = workingRange.text.length;
}
}
return {
start: start,
end: end,
length: end - start
};
}
document.getElementById("aTextBox").onkeydown = function(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode;
var deleteKey = (keyCode == 46), backspaceKey = (keyCode == 8);
var sel, deletedText, val;
if (deleteKey || backspaceKey) {
val = this.value;
sel = getInputSelection(this);
if (sel.length) {
deletedText = val.slice(sel.start, sel.end);
} else {
deletedText = val.charAt(deleteKey ? sel.start : sel.start - 1);
}
alert("About to be deleted: " + deletedText);
}
};
我得到错误在input.createTextRange。对象不支持这个属性或方法。 – 2016-09-08 12:48:44
@dIvYaNsHsInGh:这意味着你传入的对象不是input/textarea元素。 – 2016-09-08 15:27:11
不,没有变量存储删除的字符。除非您有撤销/重做历史记录,但是很难从该组件中获取信息。
最简单的方法是比较输入字段在删除/退格键被按下之前和之后的内容。
你可以尝试一些与插入位置:
function getCaretPosition(control){
var position = {};
if (control.selectionStart && control.selectionEnd){
position.start = control.selectionStart;
position.end = control.selectionEnd;
} else {
var range = document.selection.createRange();
position.start = (range.offsetLeft - 1)/7;
position.end = position.start + (range.text.length);
}
position.length = position.end - position.start;
return position;
}
document.getElementById('test').onkeydown = function(e){
var selection = getCaretPosition(this);
var val = this.value;
if((e.keyCode==8 || e.keyCode==46) && selection.start!==selection.end){
alert(val.substr(selection.start, selection.length));
} else if(e.keyCode==8){
alert(val.substr(selection.start-1, 1));
} else if(e.keyCode==46){
alert(val.substr(selection.start, 1));
}
}
测试在Chrome 6的一个例子
小心解释'(range.offsetLeft - 1)/ 7;'? – 2010-07-06 10:23:09
Err,我不知道,我在谷歌上搜索了一个插入符号位置函数 – Harmen 2010-07-06 10:27:48
插入符号位置函数是狡猾的。不仅仅是那条线,其目的超出了我,而是用于'control.selectionStart && control.selectionEnd'的测试:如果它们都是0,这将返回false,这是不好的,并且会在非IE浏览器中导致错误。 – 2010-07-06 10:45:44
- 1. 从输入字段中删除样式
- 2. 从输入字段中删除文本
- 3. 从输入字段中删除文件
- 4. 删除输入字段的验证
- 5. jQuery的删除表单输入字段
- 6. 从序列化字符串中删除空字段/输入
- 7. 带有Ajax onkeypress的输入字段导致输入被删除
- 8. 在输入字段中输入字符时自动建议?
- 9. “输入参数值”框删除字段
- 10. 添加/删除多个输入字段
- 11. 删除输入字段与跨度
- 12. 如何删除输入字段布局
- 13. 与值输入字段删除
- 14. 如果输入字段无效,则清除输入字段
- 15. 在url输入中输入'/'字符
- 16. 输入字段
- 17. 在AS3中输入文本字段中输入按键输入
- 18. AngularJS - 同时使用输入字段作为输入字段和输入字段
- 19. HTML输入 - “$”,在输入字段
- 20. 在jQuery中输入字段占位符
- 21. .keyup不能触发删除输入字段中的第一个字符
- 22. HTML输入在输入不清除字段
- 23. 在处理完输入后清除文本输入字段
- 24. 如何在输入字段中只输入10个数字?
- 25. CSS删除输入文字居中
- 26. 正在清除表单输入字段
- 27. 删除在输入中输入的符号
- 28. jquery输入字段 - 按字符获取
- 29. 如何在jquery中克隆后删除输入字段
- 30. 在Vue中删除动态输入字段
您需要检查*字符*对正则表达式吗? – mkluwe 2010-07-06 09:54:04
您可以附加* keyup *处理程序,并等待退格字符,防止默认操作,自行移除,但在此之前您知道最后一个字符是什么,以便您可以执行正则表达式。 – galambalazs 2010-07-06 10:19:45