Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2009, 15:35
brd brd вне форума
Новичок на форуме
Отправить личное сообщение для brd Посмотреть профиль Найти все сообщения от brd
 
Регистрация: 23.10.2009
Сообщений: 3

Удалить ряд символов перед или после курсора до определенного сивола
Приветсвую.
Как удалить по кнопке BackSpace или Delete ряд символов перед или после курсора до определенного сивола, т.е. если курсор после слов Иванов Иван Иванович, например, "Сидоров Иван Иванович; Иванов Иван ИвановичI" и нажали BackSpace, то должно произойти удаление до "Сидоров Иван Иванович;I" или наоборот, если курсор перед словами "IСидоров Иван Иванович; Иванов Иван Иванович", должна остаться ФИО "IИванов Иван Иванович"

Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2009, 16:52
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

http://fastcoder.org/articles/?aid=609
Ответить с цитированием
  #3 (permalink)  
Старый 29.10.2009, 11:59
brd brd вне форума
Новичок на форуме
Отправить личное сообщение для brd Посмотреть профиль Найти все сообщения от brd
 
Регистрация: 23.10.2009
Сообщений: 3

Спасибо за ссылку.
Но теперь проблема в следующем:
помимо элемента text или textarea, есть еще и другой элемент text, где каждому имени соответсвует свой код разделенный тоже символом ";", типа: 0001;0002, например:
txt.value = "Имя1;Имя2;Имя3";
val.value = "0001;0002;0003";

Через TextRange, я использую метод select(), который и удаляет мой диапазон, но только в одном элементе, например text или textarea, а как применить одновременно метод и для др. элемента text. Т.е. в данный момент времени курсор может находиться только в одном элементе! Какой вариант можете предложить?
Заранее спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2009, 08:20
brd brd вне форума
Новичок на форуме
Отправить личное сообщение для brd Посмотреть профиль Найти все сообщения от brd
 
Регистрация: 23.10.2009
Сообщений: 3

Удалить ряд символов перед или после курсора до определенного сивола
// Обрабатывает событие нажатия кнопки
			function handleEnter(ctrlVal, ctrlTxt) 
			{
			    /*
					8 - BackSpace
					13 - Enter
				*/
			    
			    var e = event;
			            
			    switch(e.keyCode) 
			    {			        
			        case 8:
			            GetPositionCursor(ctrlVal, ctrlTxt, 8);
			            break;
			        case 46:
			            GetPositionCursor(ctrlVal, ctrlTxt, 46);
			            break;
			    }
			}
			
			// Определяет место положения курсора в элементах TEXT или TEXTAREA по нажатию BakSpace или Delete
			// [url]http://archives.maillist.ru/13159/429435.html[/url]
			function GetPositionCursor(ctrlVal, ctrlTxt, key)
			{			
			    var _ctrlTxt = null;    
			    if(ctrlTxt != null)
			        _ctrlTxt = document.getElementById(ctrlTxt);
			    
			    if(_ctrlTxt != null)
			    {
			        var d = document;
			        //var s = _ctrlTxt.value;
			        var insPosL, insPosR, insBeg;
			        
			        //находим начало и конец выделения или положение курсора
			        if(ctrlTxt.selectionEnd == null) //IE
			        {
			            var ch = 0; 
			            
			            if(d.selection && d.selection.createRange)
			            {
			                var tR = d.selection.createRange();
			                var ch = 'character';
			                var tR1 = d.body.createTextRange();
			            }
			            
			            if(!ch || tR.parentElement && tR.parentElement() != _ctrlTxt)
			            {
			                insPosL = insPosR = s.length;
			            }
			            else //найти выделенную область
			            { 
			                var sel;
			                
			                insPosL = tR.text.length;
			                if(_ctrlTxt.type == 'textarea')
			                {
			                    tR1.moveToElementText(_ctrlTxt);
			                    tR.setEndPoint('StartToStart',tR1);
			                    insPosR = tR.text.length;
			                    
			                }
			                else
			                {
			                    tR.moveStart('textedit', -1);
			                    insPosR = tR.text.length;
			                    tR.moveToElementText;
			                    
			                }
			                insPosL = insPosR - insPosL;  //-эмул. selectionEnd (IE)
			            }
			        }
			        else //FF,Opera
			        { 
			            insPosL = _ctrlTxt.selectionStart;
			            insPosR = _ctrlTxt.selectionEnd;
			            if(insBeg && self.opera && !insPosL && !insPosR)
			            {
			                insPosL = insPosR = _ctrlTxt.value.length;
			                insBeg = 0;
			            }
			            //найден выделенный текст
			        }
			        			                
			        SearchText(ctrlVal, ctrlTxt, insPosL, insPosR, key)
			    }    
			}
			
			// Производит поиск удаляемого текста из text или textarea по нажатию BakSpace или Delete
            // при любом месте положения курсора
            function SearchText(ctrlVal, ctrlTxt, insPosL, insPosR, key)
            {
                var _ctrlVal = null; // Скрытый текс
                var _ctrlTxt = null; // Элемент text или textarea
                var argsVal = null; // Массив из кода
                var argsTxt = null; // Массив из текста
                var endPosInx = 0; // Начальная позиция в цепочке
                var startPosInx = 0; // Конечная позиция в цепочке
                var delTxt = null;
                var delVal = null;
                var val = "";
                var txt = "";
                                                
                if(ctrlVal != null && ctrlTxt != null)
                {
                    _ctrlVal = document.getElementById(ctrlVal);
                    _ctrlTxt = document.getElementById(ctrlTxt);
                }
                
                if(_ctrlVal != null && _ctrlTxt != null)
                {                    
                    argsTxt = _ctrlTxt.value.split(";");
                    argsVal = _ctrlVal.value.split(";");
                    
                    if(argsTxt.length < 2)
                    {
                        _ctrlVal.value = "";
                        _ctrlTxt.value = "";
                    }
                    else
                    {
                        for(var i = 0; i < argsTxt.length; i++)
                        {
                            // МЕСТО ПОЛОЖЕНИЯ КОНЕЧНОЙ ТОЧКИ ИМЕНИ В ЦЕПОЧКЕ
                            if(argsTxt.length > i + 1) // в случае когда в элементе text или textarea
                                endPosInx += argsTxt[i].length + 1; // 1 это ";"
                            else
                                endPosInx += argsTxt[i].length;
                                                                                    
                            // МЕСТО ПОЛОЖЕНИЯ НАЧАЛЬНОЙ ТОЧКИ ИМЕНИ В ЦЕПОЧКЕ
                            if(insPosL <= endPosInx && key == 8) // при BackSpace
                            {
                                if(argsTxt.length > i + 1)
                                {
                                    startPosInx = endPosInx - argsTxt[i].length - 1;
                                }
                                else
                                {
                                    startPosInx = endPosInx - argsTxt[i].length;                                    
                                }
                            }
                            else if(insPosL < endPosInx && key == 46) // при Delete
                            {
                                if(argsTxt.length > i + 1)
                                {
                                    startPosInx = endPosInx - argsTxt[i].length - 1;
                                }
                                else
                                {
                                    startPosInx = endPosInx - argsTxt[i].length;                                    
                                }                                
                            }
                                     
                            // НАХОДИТ И ВЫДЕЛЯЕТ ТЕКСТ
                            if(startPosInx < insPosL && endPosInx >= insPosL && key == 8)
                            {
                                if(argsTxt.length == i + 1)
                                {
                                    SelectValue(ctrlVal, argsVal[i]);
                                    SelectText(ctrlTxt, argsTxt[i]);
                                }
                                else
                                {
                                    SelectValue(ctrlVal, argsVal[i] + ";");
                                    SelectText(ctrlTxt, argsTxt[i] + ";");
                                }
                            }
                            else if(startPosInx <= insPosL && endPosInx > insPosL && key == 46)
                            {
                                if(argsTxt.length == i + 1)
                                {
                                    SelectValue(ctrlVal, argsVal[i]);
                                    SelectText(ctrlTxt, argsTxt[i]);
                                }
                                else
                                {
                                    SelectValue(ctrlVal, argsVal[i] + ";");
                                    SelectText(ctrlTxt, argsTxt[i] + ";");
                                }
                            }
                        }
                    }
                }
            }
            
            // Производит удаление кода
            function SelectValue(ctrl, text)    
            {
                var _ctrl = null;
                var txt = null;
                
                if(ctrl != null)
                    _ctrl = document.getElementById(ctrl);
                
                if(_ctrl != null)
                {                    
                    txt = _ctrl.value;
                    txt = txt.replace(text, "");
                    _ctrl.value = txt;
                }
            }        
            
            // Производит выделение указанного текста
            // [url]http://fastcoder.org/articles/?aid=609[/url]
            function SelectText(ctrl, text)
            {
                var _ctrl = null;
                var txtRng = null;
                                
                if(ctrl != null)
                    _ctrl = document.getElementById(ctrl);
                
                if(_ctrl != null)
                {                    
                    if(_ctrl.selectionEnd == null) // IE
                       txtRng = _ctrl.createTextRange();
                    else // FF,Opera
                       txtRng = _ctrl.createRange();
                }
                
                if(txtRng != null)
                {
                    if(txtRng.findText(text))
                        txtRng.select();
                }
            }


<input id="Val" type="text" value="0001;0002;0003" />
        <%--<textarea id="Txt" cols="20" rows="2" onkeydown="handleEnter('Val', 'Txt');">Имя1;Имя2;Имя3</textarea>--%>
        <input id="Txt" type="text" value="Имя1;Имя2;Имя3" onkeydown="handleEnter('Val', 'Txt');"/>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск