Расчет начальных и конечных индексов не учитывает '\ r \ n \' с использованием JavaScript в IE - PullRequest
0 голосов
/ 19 июля 2010

Мой XHtml, идентификатор которого отображается для пользователя, будет примерно таким, как показано ниже.

<html iTag="d1e1" version="-//W3C//DTD XHTML 1.1//EN">
 <head iTag="d1e3">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  <title iTag="d1e5">Every document must have a title</title> 
  </head>
  <body iTag="d1e9">
  <h1 iTag="d1e11" align="center">Very Important Heading</h1> 
  <b itag="dle13">Hi. Welcome to
   Java world.</b> 
  <p iTag="d1e15">Since this is just a sample, I won't put much text here.</p> 
  </body>
  </html>

Если пользователь выбирает на экране что-то вроде «в мир Java. С тех пор», поэтому выбор начинаетсябыть позицией «т».Мне нужно рассчитать выбор начинать по отношению к непосредственному родительскому элементу одного, что означает в теге "b" с itag именем "dle13" положение 't'.Точно так же конец выделения находится в теге «p» с именем iTag «dle15». Мне нужен конец выделения по отношению только к этому тегу.

Для этого мы используем приведенный ниже код Java-сценария.

if (document.selection) {   
            alert("IE");         
            txt = document.selection.createRange().text;
            var range_all = document.body.createTextRange();
            if (txt!='' )
            {
                // Finding start position
             range = document.selection.createRange();
                range.collapse(true); 
                startItag = range.parentElement().getAttribute("iTag");
             var startParentElement =  range.parentElement();                 
             if(startItag == '' || startItag == null)
             {
                startItag = range.parentElement().parentNode.getAttribute("iTag");
                startParentElement = range.parentElement().parentNode;
             }
             //alert("parentId:" + parentId);
             alert("parent node name for start:" + range.parentElement().nodeName);
                range_all.moveToElementText(startParentElement);
                for (var sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++)
                    range_all.moveStart('character', 1);
                range = document.selection.createRange();
                range.collapse(false); 
                range_all = document.body.createTextRange();
                endItag = range.parentElement().getAttribute("iTag");
             var endParentElement =  range.parentElement();                 
             if(endItag == '' || endItag == null)
             {
                endItag = range.parentElement().parentNode.getAttribute("iTag");
                endParentElement = range.parentElement().parentNode;
             }
             alert("parent node name for end:" + range.parentElement().nodeName);
                range_all.moveToElementText(endParentElement);
                for (var sel_end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; sel_end ++)
                  range_all.moveStart('character', 1);
                document.getElementById("startIndex").value= sel_start ;   
                document.getElementById("endIndex").value= sel_end ; 
                document.getElementById("startItag").value= startItag ;   
                document.getElementById("endItag").value= endItag ; 
                alert("sel_start:" + sel_start);
                alert("sel_end:" + sel_end);
             }

Но эти вычисления начала и конца idex игнорируют "новую строку ('\ r \ n')". Мне нужно иметь индекс с учетом '\ r \ n' ..

Просим вас о помощи, чтобы добиться этого ..

1 Ответ

0 голосов
/ 19 июля 2010

Я разрабатываю кросс-браузерную библиотеку диапазонов и выбора, которая будет делать это и многое другое: http://code.google.com/p/rangy. В течение нескольких недель должен быть релиз. Тем временем вы можете попробовать IERange: http://code.google.com/p/ierange,, который предоставляет оболочку для IE TextRange с тем же API, что и DOM Range, найденный в других браузерах.

UPDATE

Ранняя версия Rangy теперь доступна на http://code.google.com/p/rangy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...