2010-04-13 3 views
1

Я пытаюсь установить позицию каретки в контентном уровне div, и после небольшого поиска в Интернете и экспериментирования я получил его для работы в firefox, используя это:Установить позицию каретки в контентном уровне div в Chrome/webkit

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, или я делаю что-то неправильно?
Спасибо заранее.

ответ

4

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

Например, если у вас есть 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> 
Смежные вопросы