我在 FireFox 中滚动到文本区域中的选择时遇到了类似的问题。我无法发送“空格”和“退格”字符,因为这会覆盖文本区域中的选择。所以我找到了一种更好的方法,即在选择后立即虚拟地重新输入字符,这将强制选择可见。
代码如下:
function setSelRange(inputEl, selStart, selEnd) {
if (inputEl.createTextRange) {
var range = inputEl.createTextRange();
range.collapse(true);
range.moveEnd('character', selEnd);
range.moveStart('character', selStart);
range.select();
//range.scrollIntoView();
} else if (inputEl.setSelectionRange) {
inputEl.focus();
inputEl.setSelectionRange(selEnd, selEnd + 1);
// ---- Firefox Workaround ----
// Send a virtual key, which is the character immediately after the
// selected text. It justs rewrites the same character so that no unnecessary changes
// are made to the content.
// When the selection is at the end of the textarea, an extra space is appended
// because the inputEl.value.charCodeAt(selEnd) would otherwise cause an error.
var evt = document.createEvent("KeyboardEvent");
if (inputEl.value.length == selEnd) {
evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, 32);
} else {
evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, inputEl.value.charCodeAt(selEnd));
}
inputEl.dispatchEvent(evt);
inputEl.setSelectionRange(selStart, selEnd);
}
}
希望这可以帮助任何一直在搜索此内容的人。我浪费了很多时间试图弄清楚这一点。