IE TextRange метод выбора не работает должным образом

У меня возникла необычная проблема с документом IE, для которого contentEditable установлено значение true. Вызов select () для диапазона, который расположен в конце текстового узла, который непосредственно предшествует элементу блока, вызывает смещение выделения на один символ вправо и появляется там, где оно не должно 'т. Я'Мы представили ошибку в Microsoft против IE8. Если вы можете, пожалуйста, проголосуйте за эту проблему, чтобы ее можно было исправить.

https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=390995I»

Мы написали контрольный пример, чтобы продемонстрировать эффект:


  
    
      
        
          
            Click to the right of this line ->
            <p id="par">Block Element</p>
          
        
      
    
    
    
        window.onload = function() {
            var iframe = document.getElementById('editable');
            var doc = iframe.contentDocument || iframe.contentWindow.document;

            // An IFRAME without a source points to a blank document.  Here we'll
            // copy the content we stored in between the IFRAME tags into that
            // document.  It's a hack to allow us to use only one HTML file for this
            // test.
            doc.body.innerHTML = iframe.textContent || iframe.innerHTML;

            // Marke the IFRAME as an editable document
            if (doc.body.contentEditable) {
                doc.body.contentEditable = true;
            } else {
                var mydoc = doc;
                doc.designMode = 'On';
            }

            // A function to demonstrate the bug.
            var myhandler = function() {
                // Step 1 Get the current selection
                var selection = doc.selection || iframe.contentWindow.getSelection();
                var range = selection.createRange ? selection.createRange() : selection.getRangeAt(0);

                // Step 2 Restore the selection
                if (range.select) {
                    range.select();
                } else {
                    selection.removeAllRanges();
                    selection.addRange(range);
                    doc.body.focus();
                }
            }

            // Set up the button to perform the test code.
            var button = document.getElementById('mytrigger');
            if (button.addEventListener) {
                button.addEventListener('click', myhandler, false);
            } else {
                button.attachEvent('onclick', myhandler);
            }
          }
    
  

Проблема выставлена в функции myhandler. Это все, что яВ действительности, между сохранением и восстановлением выделения нет шага 3, и все же курсор перемещается. Это неКажется, что это произойдет, если выделение не является пустым (т. е. у меня есть мигающий курсор, но нет текста), и кажется, что это происходит только тогда, когда курсор находится в конце текстового узла, который непосредственно предшествует блочному узлу.

Кажется, что диапазон все еще находится в правильной позиции (если я вызываю parentElement для диапазона, он возвращает div), но если я получаю новый диапазон из текущего выделения, новый диапазон находится внутри тега абзаца, и это его parentElement.

Как мне обойти это и последовательно сохранять и восстанавливать выделение в Internet Explorer?

Ответы на вопрос(4)

Ваш ответ на вопрос