由于你所说的原因,这不是一件容易的事。我想出了一些像这样的kludge:
var caretInterval, caretOffset;
document.addEventListener("keydown", function(e) {
if (!e.target.contentEditable || caretInterval) return;
if (e.keyCode !== 37 && e.keyCode !== 39) // Left and right
return;
var sel = getSelection();
caretInterval = setInterval(function() {
if (sel.type === "Caret") caretOffset = sel.baseOffset;
}, 50);
});
document.addEventListener("keyup", function(e) {
if (e.keyCode !== 37 && e.keyCode !== 39) // Left and right
return;
clearInterval(caretInterval);
caretInverval = null;
var sel = getSelection();
if (sel.type === "Caret") caretOffset = sel.baseOffset;
});
如果有人试图同时按下左键和右键,可能会出现一个小问题。对于 ctrl-X 和 ctrl-V,你应该抓住cut
andpaste
事件,这实际上是胡说八道的另一个痛苦。
最后,我决定不值得为我的目的而付出努力。也许你有不同的需求。