Может быть, я неправильно понимаю вопрос, но разве не сработает следующее (предположим, что редактируемый <div>
с идентификатором "editable")? Таймер есть, потому что в Chrome собственное поведение браузера, которое выбирает весь элемент, похоже, срабатывает после события focus
, тем самым переопределяя эффект кода выбора, если он не откладывается до окончания события фокуса:
var div = document.getElementById("editable");
div.onfocus = function() {
window.setTimeout(function() {
var sel, range;
if (window.getSelection && document.createRange) {
range = document.createRange();
range.selectNodeContents(div);
range.collapse(true);
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(div);
range.collapse(true);
range.select();
}
}, 1);
};
div.focus();