Странное поведение firefox / javascript с использованием диапазонов - PullRequest
3 голосов
/ 26 ноября 2010

Привет, поэтому я работаю с диапазонами, я пытаюсь ограничить выбор, который пользователь может сделать на странице.Я имею в виду, что пользователь может выбирать все, что он хочет, но выбор не может превышать границы, которые я установлю.

Сначала я определяю "границы" с определенным диапазоном.Затем я сравниваю текущий выбор пользователя с определенным диапазоном, если текущее начало выбора ниже границ ИЛИ текущий конец выбора выше границ, которые я корректирую соответствующим образом, чтобы выбор пользователя никогда не превышал определенный диапазон границ / выбора.

Функция, представленная ниже, работает только в том случае, если я выводю предупреждение до начала процесса, если я удаляю предупреждение, то Firefox ведет себя странно (как при выборе другой части страницы и т.следующий код работает с предупреждением, и почему он не работает должным образом без предупреждения?

Спасибо!

var range = document.createRange(); // this is the boundaries range
range.selectNodeContents(document.getElementById("container"));

function test(){
            alert("let's go"); // if I remove this alert, the code doesn't work as expected, WHY?!
            if(window.getSelection().rangeCount == 0){
                return;
            }
            var curRange = window.getSelection().getRangeAt(0);
            if(curRange.compareBoundaryPoints(Range.START_TO_START, range) < 0){
                curRange.setStart(range.startContainer,range.startOffset);
            }

           if(curRange.compareBoundaryPoints(Range.END_TO_END, range) > 0){
               curRange.setEnd(range.endContainer,range.endOffset);
            }
        }

1 Ответ

5 голосов
/ 26 ноября 2010

Во-первых, для работы в других браузерах (кроме IE <= 8, в котором все это делается совершенно по-другому), вам необходимо повторно выбрать диапазон. Во-вторых, чтобы он работал в Firefox, вам нужно поработать над клоном из оригинального выбранного диапазона: </p>

function test(){
    var sel = window.getSelection();
    if (sel.rangeCount == 0) {
        return;
    }
    var curRange = sel.getRangeAt(0).cloneRange();
    if (curRange.compareBoundaryPoints(Range.START_TO_START, range) < 0) {
        curRange.setStart(range.startContainer,range.startOffset);
    }
    if (curRange.compareBoundaryPoints(Range.END_TO_END, range) > 0) {
        curRange.setEnd(range.endContainer,range.endOffset);
    }
    sel.removeAllRanges();
    sel.addRange(curRange);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...