Показать сообщение отдельно
  #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');"/>
Ответить с цитированием