Установите позицию каретки в контентном div-слое в Chrome/webkit

Я пытаюсь установить положение курсора в редактируемом контентом слое div, и после небольшого поиска в Интернете и экспериментов я заставил его работать в Firefox, используя это:

function set(element,position){
    element.focus();
    var range= window.getSelection().getRangeAt(0);
    range.setStart(element.firstChild,position);
    range.setEnd(element.firstChild,position);
}

[...]

set(document.getElementById("test"),3);

Но в Chrome/webkit он выбирает весь контент в div. Это ошибка webkit или я что-то не так делаю?
Заранее спасибо.


person Alex    schedule 13.04.2010    source источник


Ответы (1)


Смещение границы диапазона внутри узла является смещением символа только в том случае, если узел является текстовым узлом. Если узел является элементом, смещение равно количеству дочерних узлов до границы.

Например, если у вас есть HTML

<div id="myDiv">One <b>two</b> three</div>

... и вы создаете диапазон следующим образом:

var range = document.createRange();
var myDiv = document.getElementById("myDiv");
range.setStart(myDiv, 1);
range.setEnd(myDiv, 1);

... вы получите диапазон, который начинается и заканчивается сразу после первого дочернего элемента div, который является текстовым узлом:

<div id="myDiv">One |<b>two</b> three</div>
person Tim Down    schedule 14.04.2010