В цикле двигайте границы выделения, пока в него не попадут точки или оно не выйдет за пределы блока.
Для IE:
var range = document.selection.createRange(), text = range.text;
while (пока нет точки в начале text, и range в пределах нужного блока) {
range.moveStart("character", -1);
text = range.text;
…
}
while (пока нет точки в конце text, и range в пределах нужного блока) {
range.moveEnd("character", 1);
text = range.text;
…
}
Проверять нахождение в пределах блока можно поднимаясь вверх по дереву от range.parentElement().
Для остальных браузеров схема другая:
1. Получите все текстовые узлы (nodeType = 3) внутри блока, поместив их в массив.
2. Найдите в получившемся массиве элемент range.startContainer.
3. В цикле от элемента range.startContainer - 1 до начала массива складывайте nodeValue и ищите последнюю точку.
4. Для range.endContainer тоже самое в противоположном направлении.
Почитать здесь:
http://fastcoder.org/articles/?aid=609